CodeForces 680A&680B&680C&680D Round#356
2016-06-09 21:07
344 查看
昨天晚上实在是=_=困。。。(浪了一天)就没有去打Codeforces
中午醒来看看题,还不太难。
A题:模拟(水题 3minAC)
// by Sirius_Ren #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int a[6],sum=0,ans; bool cmp(int a,int b){return a>b;} int main() { for(int i=1;i<=5;i++)scanf("%d",&a[i]),sum+=a[i]; ans=sum; sort(a+1,a+6,cmp); for(int i=1;i<=5;i++) for(int j=1;j<=2;j++){ if(a[i]!=a[i+j])break; ans=min(ans,sum-a[i]-a[i]); if(j==2)ans=min(ans,sum-a[i]-a[i]-a[i]); } printf("%d",ans); }
B:(水题 5minAC)
// by Sirius_Ren #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n,a,ans=0; bool v[105]; int main(){ scanf("%d%d",&n,&a); for(int i=1;i<=n;i++)scanf("%d",&v[i]); for(int i=0;i<=n;i++){ if(a-i>0&&a+i<=n&&v[a-i]&&v[a+i]&&i)ans+=2; else if(a-i>0&&a+i<=n&&v[a-i]&&v[a+i]&&!i)ans++; else if(a-i<=0&&a+i<=n&&v[a+i])ans++; else if(a-i>0&&a+i>n&&v[a-i])ans++; } printf("%d",ans); }
C:一道数学题。
枚举50以内的素数,最后判断有没有i*i(i^2<50)的即可。
一个yes—>素数
否则—->合数
// by Sirius_Ren #include <cstdio> #include <iostream> using namespace std; int a[20]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,4,8,9,25,49},ans=0; char s[20][5]; int main() { for(int i=0;i<20;i++){printf("%d\n",a[i]);fflush(stdout);scanf("%s",s[i]);} for(int i=0;i<20;i++)if(s[i][0]=='y')ans++; if(ans>=2)printf("composite\n"); else printf("prime\n"); }
(呃其实没有“8”,当时多打了一个,不过也没关系,AC就是王道)
D:
https://www.geek-share.com/detail/2676439880.html
照着他的题解写得。 没有什么思路。。。。
// by Sirius_Ren #include <cstdio> #include <algorithm> using namespace std; long long a; long long p(long long x){return x*x*x;} pair<int,long long>b; void w(long long x,int y,long long z){ if(!x){b=max(b,make_pair(y,z));return;} long long t=1; while(p(t+1)<=x)++t; w(x-p(t),y+1,z+p(t)); if(x)w(p(t)-1-p(t-1),y+1,z+p(t-1)); } int main(){ scanf("%I64d",&a),w(a,0,0); printf("%d %I64d",b.first,b.second); }
E:第10个点WA了,并不知道怎么改。 大数据挂了。。。
// by Sirius_Ren #include <set> #include <queue> #include <cstdio> #include <algorithm> #define ff(aa,bb,cc,dd) for(int i=aa;i<=bb;i++)for(int j=cc;j<=dd;j++) #define f(aa,bb) for(int i=aa;i<=bb;i++) using namespace std; set<int>s; queue<int>que; set<int>::iterator it; int n,k,tot=0,jy,vis[501][501],v[500000],q[500000],ans=0,Q=0; char xx[]={1,-1,0,0},yy[]={0,0,1,-1},a[501][501]; void Dfs(int x,int y){ jy++,vis[x][y]=tot; f(0,3)if(!vis[x+xx[i]][y+yy[i]]&&a[x+xx[i]][y+yy[i]]=='.')Dfs(x+xx[i],y+yy[i]); } void dfs(int x,int y) { while(!que.empty())s.erase(que.front()),que.pop(); for(int i=0;i<k;i++) if(vis[x+i][y-1]) { q[vis[x+i][y-1]]--; if(!q[vis[x+i][y-1]])s.erase(vis[x+i][y-1]); } else if(a[x+i][y-1]=='X')jy--; for(int i=0;i<k;i++) if(vis[x+i][y+k-1]) { if(!q[vis[x+i][y+k-1]])s.insert(vis[x+i][y+k-1]); q[vis[x+i][y+k-1]]++; } else if(a[x+i][y+k-1]=='X')jy++; for(int i=0;i<k;i++)if(vis[x-1][y+i]&&s.find(vis[x-1][y+i])==s.end())s.insert(vis[x-1][y+i]),que.push(vis[x-1][y+i]); for(int i=0;i<k;i++)if(vis[x+k][y+i]&&s.find(vis[x+k][y+i])==s.end())s.insert(vis[x+k][y+i]),que.push(vis[x+k][y+i]); for(int i=0;i<k;i++)if(vis[x+i][y-1]&&s.find(vis[x+i][y-1])==s.end())s.insert(vis[x+i][y-1]),que.push(vis[x+i][y-1]); for(int i=0;i<k;i++)if(vis[x+i][y+k]&&s.find(vis[x+i][y+k])==s.end())s.insert(vis[x+i][y+k]),que.push(vis[x+i][y+k]); int temp=jy; for(it=s.begin();it!=s.end();it++)temp+=v[*it]; ans=max(ans,temp); if(y+k<=n)dfs(x,y+1); for(int i=0;i<k;i++) if(vis[x+i][y-1]) { if(!q[vis[x][i-1]])s.insert(vis[x][i-1]); q[vis[x][i-1]]++; } else if(a[x+i][y-1]=='X')jy++; for(int i=0;i<k;i++) if(vis[x+i][y+k-1]) { q[vis[x+i][y+k-1]]--; if(!q[vis[x+i][y+k-1]])s.erase(vis[x+i][y+k-1]); } else if(a[x+i][y+k-1]=='X')jy--; if(x+k<=n&&y==1) { for(int i=1;i<k;i++) { if(vis[x][i]) { q[vis[x][i]]--; if(!q[vis[x][i]])s.erase(vis[x][i]); } else if(a[x][i]=='X')jy--; } for(int i=1;i<k;i++) { if(vis[x+k][i]) { q[vis[x+k][i]]++; } else if(a[x+k][i]=='X')jy++; } dfs(x+1,1); } } int main(){ scanf("%d%d",&n,&k); ff(1,n,0,n)scanf("%c",&a[i][j]); ff(1,n,1,n)if(!vis[i][j]&&a[i][j]=='.')jy=0,tot++,Dfs(i,j),v[tot]=jy; jy=0; ff(1,k,1,k-1) if(a[i][j]=='X')jy++; else{ if(!q[vis[i][j]])s.insert(vis[i][j]); q[vis[i][j]]++; } dfs(1,1); printf("%d",ans); }
E题已挂。
相关文章推荐
- 【Leetcode】Isomorphic Strings
- 定义常量 const 和 #define 区别1
- 【Leetcode】Word Pattern
- Python正则表达式
- C/C++杂记:虚函数的实现的基本原理
- 代码整洁之道(一)理论篇
- C# 数据类型
- emacs 安装ecb插件
- 《大数据精准挖掘》保险电销应用—寻找目标客户
- Android Adapter嵌套Adapter(文档类app,说明书类app)
- UVA 1025 A Spy in the Metro
- RedHat 7 配置本地yum源
- MJRefresh实现原理(详细版)
- java中文字符写入MySQL乱码问题
- 1009. 说反话 (20)
- 虚拟机安装RHEL 6.2
- 基本算法小结
- 对时间(Date)的计算方法
- 备战NOIP(其实并没有什么必然联系)
- linux 设备上没有空间