集训队日常训练20180525-DIV2
A.2295
求有多少素数对和等于n。
暴力。
#include <bits/stdc++.h>
using namespace std;
int ss(int n)
{
int i=,a=sqrt(n);
for(;i<=a;i++)
if(n%i==) return ;
return ;
}
int main()
{
int n;
while(scanf("%d",&n),n)
{
int sum=;
for(int i=;i<=n/;i++)
{
if(ss(i)&&ss(n-i)) sum++;
}
printf("%d\n",sum);
}
return ;
}
A.cpp
B.4607
给一个数能否被17整除。
同余。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
while(cin>>s,s!="")
{
int su=;
for(int i=; s[i]; i++)su=(su*+s[i]-'')%;
cout<<(su?:)<<endl;
}
}
B.cpp
C.4681
给一个4*4的方格图,一次移动,输出结果。
暴力模拟。
#include<bits/stdc++.h>
using namespace std;
int a[][];
void left_swap()
{
for(int i=;i<;i++)
for(int j=;j<;j++)
{
int k=j;
while(k>=&&a[i][k-]==)
{
swap(a[i][k],a[i][k-]);
k--;
}
}
}
void left()
{
for(int i=;i<;i++)
for(int j=;j<;j++)
if(a[i][j]==a[i][j+])
{
a[i][j]+=a[i][j+];
a[i][j+]=;
left_swap();
}
}
void right_swap()
{
for(int i=;i<;i++)
for(int j=;j>=;j--)
{
int k=j;
while(k<=&&a[i][k+]==)
{
swap(a[i][k],a[i][k+]);
k++;
}
}
}
void right()
{
for(int i=;i<;i++)
for(int j=;j>=;j--)
if(a[i][j]==a[i][j-])
{
a[i][j]+=a[i][j-];
a[i][j-]=;
right_swap();
}
}
void top_swap()
{
for(int j=;j<;j++)
for(int i=;i<;i++)
{
int k=i;
while(k>=&&a[k-][j]==)
{
swap(a[k][j],a[k-][j]);
k--;
}
}
}
void top()
{
for(int j=;j<;j++)
for(int i=;i<;i++)
if(a[i+][j]==a[i][j])
{
a[i][j]+=a[i+][j];
a[i+][j]=;
top_swap();
}
}
void buttom_swap()
{
for(int j=;j<;j++)
for(int i=;i>=;i--)
{
int k=i;
while(k<=&&a[k+][j]==)
{
swap(a[k][j],a[k+][j]);
k++;
}
}
}
void buttom()
{
for(int j=;j<;j++)
for(int i=;i>=;i--)
if(a[i][j]==a[i-][j])
{
a[i][j]+=a[i-][j];
a[i-][j]=;
buttom_swap();
}
}
int main()
{
int n;
while(cin>>n)
{
memset(a,,sizeof(a));
for(int i=;i<;i++)
for(int j=;j<;j++)
cin>>a[i][j];
if(n==)
{
left_swap();
left();
}
else if(n==)
{
right_swap();
right();
}
else if(n==)
{
top_swap();
top();
}
else if(n==)
{
buttom_swap();
buttom();
}
for(int i=;i<;i++)
{
for(int j=;j<;j++)
if(j==)cout<<a[i][j];
else cout<<" "<<a[i][j];
cout<<endl;
}
}
return ;
}
C.cpp
D.4682
n个部下,每个部下需要Bi分钟交待任务,让后Ji分钟后完成任务。确定一个顺序,使得最早完成任务。
贪心,按照Ji从大到小排序,然后求解。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct ydw{
ll b,j;
}qu[];
bool cmp(ydw x,ydw y)
{
if(x.j!=y.j)return x.j>y.j;
return x.b>y.b;
}
int main()
{
ll i,n,k;
int kk=;
while(scanf("%I64d",&n),n!=)
{
for(i=;i<n;i++)
{
cin>>qu[i].b>>qu[i].j;
}
sort(qu,qu+n,cmp);
ll s=;
for(i=;i<n;i++)
{
s+=qu[i].b;
for(k=;k<i;k++)
{
qu[k].j-=qu[i].b;
}
}
ll m=;
for(i=;i<n;i++)m=max(m,qu[i].j);
printf("Case %d: ",kk++);
cout<<s+m<<endl;
}
return ;
}
D.cpp
E.3476
给n个时间,问是否矛盾。
暴力。
#include<stdio.h>
int main(){
int i,j,n,h,m,s,h1,m1,s1;
while(scanf("%d",&n)!=EOF,n){
int f=,a[]={};
for(i=;i<n;i++){
scanf("%d:%d-%d:%d",&h,&m,&h1,&m1);
s=h*+m;s1=h1*+m1;
if(f){
for(j=s;j<s1;j++){
if(a[j]){
f=;break;
}
a[j]=;
}
}
}
if(f)printf("no conflict\n");
else printf("conflict\n");
}
}
E.cpp
F.4499
给一串AB串,操作1选1个位子把A改成B,B改成A,操作2选1个k,改变[1,k]的值。
思维,倒着来看。
如果s[i]='B'那么需要改,如果修改长度>=2那么肯定选操作2,否则选操作1。
#include<cstdio>
int n,g,i,j;
char ch;
bool s[],k;
int main()
{
scanf("%d\n",&n);
while(i<=n)
{
s[++i]=(ch=getchar())=='A'?:;
}
i--;
while(i>=)
{
if(k^s[i])i--;
else
{
j=-;
while(!(k^s[i]))i--,j++;
if(j)k^=;
g++;
}
}
printf("%d",g);
}
F.cpp
G.3587
输出A,B的最大公约数。
欧几里得算法。
#include<stdio.h>
__int64 gcd(__int64 a,__int64 b){
__int64 r=a%b;
while(r){
a=b;b=r;r=a%b;
}
return b;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
__int64 a,b;
scanf("%I64d%I64d",&a,&b);
printf("%I64d\n",gcd(a,b));
}
return ;
}
G.cpp
H.3451
村庄之间已经有一些道路,你的工作就是修建一些道路,使所有村庄都连通起来,所有道路的长度都是最小的。
最小生成树,已经有的路权值为0。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define MAXN 100+5
#define MAXM 5000+5
int Map[MAXN][MAXN];
int F[MAXN];
int n,m,fx,fy,cnt;
struct edge
{
int u;
int v;
int w;
}edges[MAXM];
bool cmp(edge a,edge b)
{
return a.w<b.w;
}
int Find(int x)
{
return F[x]==-?x:F[x]=Find(F[x]);
}
int Kruskal()
{
sort(edges,edges+m,cmp);
int ans=;
for(int i=;i<m;i++)
{
int u,v,w;
u=edges[i].u;
v=edges[i].v;
w=edges[i].w;
fx=Find(u);
fy=Find(v);
if(fx!=fy)
{
ans+=w;
cnt++;
F[fx]=fy;
}
if(cnt==n-)break;
}
if(cnt<n-)return -;
else return ans;
}
int main()
{
scanf("%d",&n);
m=;
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
int w;
scanf("%d",&w);
if(i==j||i>j)continue;//多余的路径
edges[m].u=i;
edges[m].v=j;
edges[m++].w=w;
}
}
memset(F,-,sizeof(F));
int Q,a,b;
scanf("%d",&Q);
for(int i=;i<Q;i++)
{
scanf("%d%d",&a,&b);
fx=Find(a);
fy=Find(b);
if(fx!=fy)
{
F[fx]=fy;
cnt++;
}
}
int ans=Kruskal();
printf("%d\n",ans);
return ;
}
H.cpp
I.3675
给三条边,问是否等边等腰斜角。
直接判一判就行。
#include<bits/stdc++.h>
using namespace std; #define ll __int64
int main()
{
int T,ca=;
cin>>T;
while(T--)
{
ll a[];
cin>>a[]>>a[]>>a[];
sort(a,a+);
cout<<"Case #"<<ca++<<": ";
if(a[]+a[]<=a[])cout<<"invalid!\n";
else if(a[]==a[]&&a[]==a[])cout<<"equilateral\n";
else if(a[]==a[]||a[]==a[])cout<<"isosceles\n";
else cout<<"scalene\n";
}
}
I.cpp
J.2913
[1,M]且可以整除a[i]的个数。
容斥,如果是奇数,那么个数ans+=m/lcm,如果是偶数,那么个数ans-=m/lcm,其中lcm为当前选中数的最小公倍数。
#include<bits/stdc++.h>
using namespace std; int main()
{
int n,m,a[];
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=;i<n;i++)scanf("%d",&a[i]);
int ans=;
for(int i=;i<(<<n);i++)
{
int lcm=,cnt=;
for(int j=;j<n;j++)
if(i&(<<j))
{
lcm=a[j]/__gcd(a[j],lcm)*lcm;
cnt++;
}
if(cnt&)ans+=m/lcm;
else ans-=m/lcm;
}
printf("%d\n",ans);
}
return ;
}
J.cpp
集训队日常训练20180525-DIV2的更多相关文章
- 集训队日常训练20181117 DIV2
大佬们一顿操作猛如虎,拼命AC强啊 4262: 区间异或 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal ...
- 集训队日常训练20181124 DIV2
急急忙忙要出去比赛就拉了一场有点sb的题目 5202: 网络寻路 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte总提交: 15 ...
- 集训队日常训练20181110 DIV2 题解及AC代码
4375: 孪生素数 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 324 ...
- 集训队日常训练20181201 C 1003 : 种类数
时间限制(普通/Java):2000MS/6000MS 内存限制:65536KByte总提交: 8 测试通过:5 描述 一共有 n个数,第 i 个数是 xi ,其中xi ...
- 集训队日常训练20181201 E 1005 : 小蝌蚪
时间限制(普通/Java):500MS/1500MS 内存限制:65536KByte总提交: 25 测试通过:5 描述 有 n 个装着小蝌蚪的水缸排成一排,你拥有一个无限 ...
- 集训队日常训练20180525-DIV1
A.2805 N*M的图,每次浇水(X1,Y1)-(X2,Y2)围成的矩形,问最后有多少点被浇水了. 暴力. #include<bits/stdc++.h> using namespace ...
- 集训队日常训练20180518-DIV2
A.3232 n个物品,换取要花积分,问刚好花完积分能换最大多少价值的物品. 多重背包. #include <bits/stdc++.h> using namespace std; ]; ...
- 集训队日常训练20180518-DIV1
A.3583 n根木棍是否能分成相等两堆. 背包dp,首先求和sum,如果为偶数就说明不行,否则考虑做一个sum/2大小的背包. #include<bits/stdc++.h> using ...
- 集训队日常训练20180513-DIV1
A.3132 给一个有向图,问能否从任意点出发都能进入一个环中. 深搜. #include<bits/stdc++.h> using namespace std; ; vector< ...
随机推荐
- maven相互依赖导致无法编译成功
起初是新加了个模块,启动前编译时error,提示找不到依赖模块的类,但java文件上是没有报错的. 后经过排查,发现是循环依赖导致的此问题. 如图,弹出框中有循环依赖的模块会显示红色,右键Open M ...
- java定时器demo
package cn.threadtest.thread; import java.util.Date; import java.util.Timer; import java.util.TimerT ...
- JavaScrip中的循环语句
循环语句 循环语句,也是流程控制语句中不可或缺的一种结构.在 JavaScrip中实现循环的方式有好几个一个来看 1.为什么需要循环 在具体介绍 Javascript中的循环之前,首先我们来明确一个问 ...
- SEO-----网站不被收录的原因
1. 新站的收录较慢 2. 文章质量不高 文章难以阅读 排版乱 内容是别的网站采集来的 很难被收录 3. 网站被降权中 4. 蜘蛛不访问[网站配置] 检查网站是否屏蔽了蜘蛛的爬取[ robots ...
- redis深入学习(二)-----redis配置文件、持久化
redis配置文件 地址 units单位 a 配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bitb 对大小写不敏感 GENERAL通用 1.daemonize 2.pidf ...
- VS 断点不会命中的情况
总结下遇到的几次断点无法命中的情况: 1.手误设置为release模式 如果是release模式的情况下,断点跳转命中情况是无法预知的,所以请修改成debug 2.与源文件不一致 这个情况是最常见的, ...
- python基础-基础知识考试_day5 (包括:函数_递归等知识)
老男孩 Python 基础知识练习(三) 1.列举布尔值为 False 的值空,None,0, False, '', [], {}, () 2.写函数:根据范围获取其中 3 和 7 整除的所有数的和, ...
- @RestControllerAdvice作用及原理
原文:Spring Boot 系列(八)@ControllerAdvice 拦截异常并统一处理 在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@Exceptio ...
- Hadoop构架概览
hadoop是一个开源的软件框架,是一个利用商业硬件处理和存储大型数据的软件.从下到上主要有五个主要的组成部分: 集群,是一套主机(节点)组成的.节点可以以机架划分.这个是硬件级别的构架. YARN构 ...
- Android 开发 AudioRecord音频录制
前言 Android SDK 提供了两套音频采集的API,分别是:MediaRecorder 和 AudioRecord,前者是一个更加上层一点的API,它可以直接把手机麦克风录入的音频数据进行编码压 ...