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 }

 

posted @ 2012-11-17 19:50  Naix_x  阅读(206)  评论(0编辑  收藏  举报