Codeforces Round #150 (Div. 2)
这次 感觉挺没状态的,做了俩题,居然还涨rating了,又变蓝了。。。争取稳步上升。。。记一下流水账。
在宿舍里做CF,也不知道是环境的问题,还是怎么着,心静不下来。第一题爆水的题,看了近半个小时刚看懂题意。。。
当时我就慌乱了,有种想要睡觉的冲动,好在,心静了下来,当时宿舍确实挺乱的,还好,之后就没啥影响了。
第二个题题意简单,然后第一想法就是枚举,然后就是漫长的实现代码时间了,本来想直接枚举每一位的。。。想了想有简单的写法,然后就中间sb了两次,位数有点判断不清了,写了个暴力发现小数据都对了,搞了个特判,终于过了这个题。
第三个题还有40-50分钟的样子,题意也挺简单,关于or运算的,当时看了一下数据规模,肯定是O(n)或者O(n*logn)的算法。。。然后想了又想,搞了个平方的暴力解法,试试水,水过的样例数据,这个乱搞代码,离比赛还有不长时间被cha了。。。
第三题正解 今天虎哥给我讲了一下,搞一个哈希之类的遍历一次更新就好,写了写过了,每次CF最后的时间都感觉利用的不好。
A题 太假了。。。看题的时候在神游啊。。。
1 #include <iostream> 2 #include <cstdio> 3 #include <map> 4 #include <algorithm> 5 #include <cstring> 6 #include <cmath> 7 using namespace std; 8 #define N 1000000 9 int p[100],o[1000]; 10 int main() 11 { 12 int n,k,i,j,u; 13 scanf("%d%d",&n,&k); 14 for(i = 1;i <= k;i ++) 15 { 16 scanf("%d",&p[i]); 17 o[p[i]] = 1; 18 } 19 for(i = 1;i <= k;i ++) 20 { 21 printf("%d",p[i]); 22 for(j = 2;j <= n;j ++) 23 { 24 for(u = 1;u <= n*k;u ++) 25 { 26 if(!o[u]) 27 { 28 o[u] = 1; 29 printf(" %d",u); 30 break; 31 } 32 } 33 } 34 printf("\n"); 35 } 36 return 0; 37 }
B题 提交的时候还带着当时写的暴力代码。。。
1 #include <iostream> 2 #include <cstdio> 3 #include <map> 4 #include <algorithm> 5 #include <cstring> 6 #include <cmath> 7 using namespace std; 8 #define N 1000000 9 map <__int64,int> o; 10 int judge(__int64 a) 11 { 12 int p[11],i; 13 memset(p,0,sizeof(p)); 14 while(a) 15 { 16 p[a%10] = 1; 17 a = a/10; 18 } 19 int t = 0; 20 for(i = 0;i <= 9;i ++) 21 { 22 if(p[i]) 23 t ++; 24 } 25 if(t > 2) 26 return 0; 27 else 28 return 1; 29 } 30 int main() 31 { 32 __int64 n,ans,t,ans2; 33 int i,j,k,u,v; 34 scanf("%I64d",&n); 35 ans = 0; 36 ans2 = 0; 37 for(i = 1;i <= 9;i ++) 38 { 39 if(i <= n) 40 ans ++; 41 } 42 for(i = 1;i <= 9;i ++) 43 { 44 for(j = 0;j <= 9;j ++) 45 { 46 for(k = 1;k <= 8;k ++) 47 { 48 for(u = 0;u < (1<<k);u ++) 49 { 50 t = i; 51 for(v = 0;v <= k-1;v ++) 52 { 53 if(u&(1<<v)) 54 t = t*10+i; 55 else 56 t = t*10+j; 57 } 58 if(!o[t]&&t <= n) 59 { 60 o[t] = 1; 61 ans ++; 62 } 63 } 64 } 65 } 66 } 67 if(1000000000 <= n) 68 ans ++; 69 /* for(i = 1;i <= n;i ++) 70 { 71 if(judge(i)) 72 ans2 ++; 73 }*/ 74 printf("%I64d\n",ans); 75 //printf("%I64d\n",ans2); 76 return 0; 77 }
C题
1 #include <iostream> 2 #include <cstdio> 3 #include <map> 4 #include <algorithm> 5 #include <cstring> 6 #include <cmath> 7 using namespace std; 8 map<int,int> mp,mz; 9 map<int,int>::iterator it; 10 int p[100001]; 11 int que[100001]; 12 int main() 13 { 14 int i,n,j,num,ans = 0; 15 scanf("%d", &n); 16 for(i = 1; i <= n; i ++) 17 scanf("%d",&p[i]); 18 for(i = 1; i <= n; i ++) 19 { 20 num = 1; 21 for(it = mp.begin(); it != mp.end(); it ++) 22 { 23 if(!mz[(*it).first]) 24 { 25 mz[(*it).first] = 1; 26 ans ++; 27 } 28 que[num++] = (*it).first; 29 } 30 mp.clear(); 31 mp[p[i]] = 1; 32 for(j = 1; j <= num-1; j ++) 33 { 34 mp[que[j]|p[i]] = 1; 35 } 36 } 37 for(it = mp.begin(); it != mp.end(); it ++) 38 { 39 if(!mz[(*it).first]) 40 { 41 mz[(*it).first] = 1; 42 ans ++; 43 } 44 que[num++] = (*it).first; 45 } 46 printf("%d\n",mz.size()); 47 return 0; 48 }