Codeforces 596A B C Codeforces Round #331 A B C
2015-11-16 11:41
337 查看
A.水。读题目要快而准确
B 。不难想,不过比A题好一点,代码很短。
详细注释代码:
总结:A题都WA了两次,B题代码交错了一次,C题最后20分钟才开始敲代码,期间思路虽然正确过但是没有把握。A,B两题加起来再多也不能超过15分钟过的,而我却花了50分钟,照现在这样,打铁一辈子的命。C题用这中方法要考虑的比较全面但是也不难想。三题一个小时之内应该要膜出来!唉,再接再厉!
<span style="font-size:14px;">#include <iostream> #include <cmath> #include <stdio.h> using namespace std; int main() { int n,a[4],b[4]; long long s; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) { scanf("%d%d",&a[i],&b[i]); } if(n==1) { printf("-1\n"); continue; } if(n==2) { if(a[1]==a[0] || b[0]==b[1]) s=-1; else s=(long long )abs(b[1]-b[0])*abs(a[1]-a[0]); } else if(n==3 || n==4 ) { for(int i=0;i<n-1;i++) { for(int j=i+1;j<n;j++) { if(a[i]!=a[j] && b[i]!=b[j]) s=(long long )abs(b[i]-b[j])*abs(a[i]-a[j]); } } } printf("%I64d\n",s); } return 0; }</span><span style="font-size:18px;"> </span>
B 。不难想,不过比A题好一点,代码很短。
<span style="font-size:14px;">#include <iostream> #include <stdio.h> #include <cmath> #include <string.h> using namespace std; long long a[200005],b[200005]; int main() { int n; long long sum,node,cnt; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) scanf("%I64d",&b[i]); memset(a,0,sizeof(a)); sum=cnt=0; for(int i=0;i<n;i++) { node=b[i]-(a[i]+sum); cnt+=abs(node); sum+=node; } printf("%I64d\n",cnt); } return 0; }</span><span style="font-size:18px;"> </span>C:一开始并没有膜出来,今天早上看了大牛的代码,完全看不懂,都用了pair。对我有用的是数据。看了一直WA的test4的数据,终于找到了自己的错误,在对W排序的时候,如果wi==wj应该w.id小的排在前面。改完就过了。
详细注释代码:
<span style="font-size:14px;">#include <stdio.h> #include <iostream> #include <string.h> #include <algorithm> #include <cmath> using namespace std; struct node1 { int x,y,v; }t[100005],a[100005]; struct node2 { int w,id; }p[100005]; bool cmp1(node1 n1,node1 n2) { return n1.v<n2.v || n1.v==n2.v && n1.y<n2.y || n1.v==n2.v && n1.y==n2.y && n1.x<n1.x; //对点排序 } bool cmp2(node2 n1,node2 n2) { return n1.w<n2.w || n1.w==n2.w && n1.id<n2.id; //对W排序 } int main() { int n; while( cin>>n){ for(int i=0;i<n;i++) { scanf("%d%d",&t[i].x,&t[i].y); t[i].v=t[i].y-t[i].x; } for(int i=0;i<n;i++) { scanf("%d",&p[i].w); p[i].id=i; //记录Wi的位置 } sort(t,t+n,cmp1); sort(p,p+n,cmp2); int flag=0; for(int i=0;i<n;i++) //在这两个排序之后,如果是YES,t[i].v和p[i].w 是一一对应的,否则NO { if(t[i].v!=p[i].w) { flag=1; break; } } if(flag) { printf("NO\n"); return 0; } for(int i=0;i<n;i++) { a[p[i].id].x=t[i].x; //因为是YES了,所以一定是一一对应的,W数组元素的顺序就是最后答案的顺序, a[p[i].id].y=t[i].y; //所以用一个新的数组记录这个最后答案的顺序 } for(int k=0;k<n-1;k++) //数组a现在已经是正确的顺序了,那么就是要判断一下这个顺序是否满足“优美顺序” { if((a[k+1].x<=a[k].x && a[k+1].y<=a[k].y)) //判断是否是“优美顺序”,到底是不是这样,实际上我也不知道证明这样可以,但是举不出反例 { flag=1; break; } } if(flag) printf("NO\n"); else { printf("YES\n"); for(int i=0;i<n;i++) printf("%d %d\n",a[i].x,a[i].y); } } return 0; }</span><span style="font-size:18px;"> </span>
总结:A题都WA了两次,B题代码交错了一次,C题最后20分钟才开始敲代码,期间思路虽然正确过但是没有把握。A,B两题加起来再多也不能超过15分钟过的,而我却花了50分钟,照现在这样,打铁一辈子的命。C题用这中方法要考虑的比较全面但是也不难想。三题一个小时之内应该要膜出来!唉,再接再厉!
相关文章推荐
- LeetCode---First Bad Version
- jquery实践案例--验证电子邮箱
- 理解输入输出流
- Spring MVC 入门分析
- 关于mpls和ns3
- CSS背景图拉伸自适应尺寸,全浏览器兼容
- 跟我学习javascript的函数调用和构造函数调用
- krpanotools基本操作
- Linux之tr命令
- 出现次数
- myeclipse package explorer显示问题及maven配置问题
- keilMDK生成代码的内存分配
- 函数传参的三种方式
- Gradle 使用Jetty插件启动web项目时出现"java.lang.OutOfMemoryError: PermGen space"解决方法
- Linux strace命令
- SpringMVC拦截器实例
- Hotseat栏增加滑动功能
- Camera 施工中
- zimbra全局地址显示不全和galsync账户删除后的问题解决
- 单例模式