codeforces 260 div2 virtual Participation
2015-01-17 19:28
357 查看
第二场VP,被第三题卡了,虽然挺早就找到方法了....但是最后wa我一脸的眼泪。D题似乎是NIM游戏,暑假集训的内容要好好看看了...不会写
嗯接下来是照例是前3题的题解
A. Laptops
B. Fedya and Maths
本以为是一个数论题,用数论知识当然也是比较好解决的,但是显然这个应该是循环数列,求一下循环节,发现循环节是 1 1 1 4,这样只要原数能被4整除就输出4,否则输出1,那么只要做一个高精度除以常数的除法就可以了
这题的大意就是,给你n个数,如果你选中了k,那么所有的k+1和k-1都从这些数中剔除,如何选择能使得到的数值最大。
这其实就是一个简单dp,状态转移方程为dp[i]=max(dp[i-1],dp[i-2]+i*times[i])
另外两道题单开
嗯接下来是照例是前3题的题解
A. Laptops
#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; typedef struct{ int price,q; }node; node lap[100010]; bool cmp(node a,node b){ return a.price>b.price; } int main() { int n,flag; flag=0; cin>>n; for(int i=0;i<n;i++){ scanf("%d%d",&lap[i].price,&lap[i].q); } sort(lap,lap+n,cmp); for(int i=1;i<n;i++){ if(lap[i-1].q<lap[i].q) {flag=1; break; } } if(flag){ printf("Happy Alex\n"); } else printf("Poor Alex\n"); return 0; }
B. Fedya and Maths
本以为是一个数论题,用数论知识当然也是比较好解决的,但是显然这个应该是循环数列,求一下循环节,发现循环节是 1 1 1 4,这样只要原数能被4整除就输出4,否则输出1,那么只要做一个高精度除以常数的除法就可以了
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; char txt[100010]; bool judge(){ int len,tmp,left,ca,j; bool ans; len=strlen(txt); ca=0; j=0; for(int i=0;i<len;i++){ tmp=(txt[i]-'0'+ca*10)/2; ca=(txt[i]-'0'+ca*10)%2; txt[i]=tmp+'0'; if(i==len-1&&ca==1) return false; } if(txt[0]=='0') j=1; ca=0; for(;j<len;j++){ tmp=(txt[j]-'0'+ca*10)/2; ca=(txt[j]-'0'+ca*10)%2; txt[j]=tmp+'0'; if(j==len-1&&ca==1) return false; } return true; } int main() { gets(txt); if(judge()) printf("4\n"); else printf("0\n"); return 0; }C. Boredom
这题的大意就是,给你n个数,如果你选中了k,那么所有的k+1和k-1都从这些数中剔除,如何选择能使得到的数值最大。
这其实就是一个简单dp,状态转移方程为dp[i]=max(dp[i-1],dp[i-2]+i*times[i])
<span style="font-size:10px;">#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; #define N 100010 #define LL long long int num ; LL dp ; int main() { memset(num,0,sizeof(num)); memset(dp,0,sizeof(dp)); int n,t; cin>>n; for(int i=0;i<n;i++){ scanf("%d",&t); num[t]++; } dp[1]=num[1]; dp[2]=num[2]*2; for(int i=2;i<N;i++){ dp[i]=max(dp[i-1],dp[i-2]+(LL)num[i]*i); } printf("%I64d\n",dp[100000]); return 0; }</span>
另外两道题单开
相关文章推荐
- codeforces 260 div2 C题
- codeforces 260 div1
- codeforces 260 div2 A,B,C
- 第九次codeforces竞技结束 #260 Div 2
- codeforces 260 div2 A,B,C
- codeforces 260 div2 B题
- codeforces 260 div2 B题
- codeforces 260 div2 B题
- codeforces 260 div2 C题
- codeforces 260 div2 C题
- Codeforces 242(DIV 2) C题
- CF DIV2 260 C - Boredom
- codeforces --- Round #244 (Div. 2) B. Prison Transfer
- 【codeforces】Codeforces Round #370 (Div. 2) C
- Codeforces Div2 244AB
- codeforces 98 div2 C.History 水题
- Codeforces 400 C. Inna and Huge Candy Matrix【 Codeforces Round #234 (Div. 2)】
- codeforces 148 div1
- codeforces #309 div2 分类: codeforces 2015-06-26 20:11 21人阅读 评论(0) 收藏
- 【codeforces】Codeforces Round #310 (Div. 1)【题解】