集训队日常训练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< ...
随机推荐
- python 中的 is 方法 总结
isidentifier: 判断变量名是否合法 iskeyword:是否为内置关键字
- Jmeter接口测试(第二篇)
一.新建项目 1.运行Jmeter.bat打开Jmeter 2.添加线程组(测试计划->添加->Thread(users)->线程组) 3.添加HTTP请求(线程组->添加-& ...
- python 编码问题:'ascii' codec can't encode characters in position 的解决方案
报错: 'ascii' codec can't encode characters in position 8-50: ordinal not in range(128) Python在安装时,默认的 ...
- [Hdu-6053] TrickGCD[容斥,前缀和]
Online Judge:Hdu6053 Label:容斥,前缀和 题面: 题目描述 给你一个长度为\(N\)的序列A,现在让你构造一个长度同样为\(N\)的序列B,并满足如下条件,问有多少种方案数? ...
- SVN 环境搭建
安装配置 安装环境 #查看系统版本环境 [root@svn ~]# cat /etc/redhat-release CentOS release 6.7 (Final) [root@svn ~]# u ...
- CODE[VS]1372:DNA
Description 为了进一步分析外星生物,专家们决定对 DNA 进行切割.限制性核酸内切酶是基因工程中的重要的工具酶.它会识别一段碱基序列(说白了就是只包含 ATGC 的序列)并且切割开.Eco ...
- hihocoder 1084 (哈希)
题目链接 时间限制:4000ms 单点时限:4000ms 内存限制:256MB 描述 你知道KMP吗?它是用于判断一个字符串是否是另一个字符串的子串的算法.今天我们想去扩展它. 在信息理论中,在两个相 ...
- tmux连接时多个显示器分别显示不同的窗口大小
如果两个电脑连接同一个tmux,但是他们各自的显示器大小不同,那么就会在一个显示器部分会显示灰色区.在tmux里面有个设置可以更改,在tmux里面输入命令 tmux set-window-opti ...
- Golang Learn Log #0
Print/Printf 区别 Print: 可以打印出字符串, 和变量 fmt.Println(var) //right fmt.Println("string") //righ ...
- idea如何清晰地查看java类的继承结构及该类的所有方法?
转载自:https://blog.csdn.net/luo609630199/article/details/82192938 我们在世用idea是平时除了编码外,有时我们需要查看源码或者别人写的代码 ...