Codeforces Round #434 (Div. 2)【A、B、C、D】

Codeforces Round #434 (Div. 2)

 

codeforces 858A. k-rounding【水】

题意:已知n和k,求n的最小倍数x,要求x后缀至少有k个0。

题解:答案就是10^k和n的最小公倍数。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cmath>
 5 using namespace std;
 6 typedef long long ll;
 7 ll gcd(ll a, ll b) {return b?gcd(b,a%b):a;}
 8 int main() {
 9     ll n, k, s=1;
10     scanf("%lld %lld", &n, &k);
11     while(k--) s *= 10;
12     ll t = gcd(n, s);
13     printf("%lld\n", n / t * s);
14     return 0;
15 }
15ms

codeforces 858B. Which floor? 【暴力】

题意:已知每层楼的房间数量相同但不知道具体数目,从一楼往上依次给每个房间从小到大编号(从1号开始),现在给出m个房间的信息(房间号和所在楼层),求第n号房间所在楼层,若有多解则输出-1。

题解:暴力,维护每层楼的可能的最小、最大房间数。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 int main() {
 6     int n, m, k, f;
 7     int mi=1, ma=100;
 8     scanf("%d%d", &n, &m);
 9     while(m--) {
10         scanf("%d%d", &k, &f);
11         if(f>1) ma = min(ma, (k-1)/(f-1));
12         mi = max(mi, (k+f-1)/f);
13     }
14     //printf("%d %d\n", mi, ma);
15     if((f=(n+mi-1)/mi) != (n+ma-1)/ma) puts("-1");
16     else printf("%d\n", f);
17     return 0;
18 }
15ms

codeforces 858C. Did you mean...【水】

题意:给你一个字符串,现在要你给其中加空格隔开单词,使得每个单词不能有连续三个以上不同的辅音字母,输出加的空格最少的字符串。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<map>
 5 using namespace std;
 6 const int N = 3001;
 7 char s[N], t[N];
 8 map<char, int> mp;
 9 int main() {
10     mp['a'] = mp['e'] = mp['i'] = mp['o'] = mp['u'] = 1;
11     int i, len;
12     gets(s);
13     len = strlen(s);
14     if(len < 3) {puts(s); return 0;}
15     int cnt = 0;
16     t[cnt++] = s[0]; t[cnt++] = s[1];
17     for(i = 2; i < len; ++i) {
18         if(!mp[s[i]] && !mp[s[i-1]] && !mp[s[i-2]] &&
19            (s[i]!=s[i-1] || s[i-1] != s[i-2])) {
20             t[cnt++] = ' '; t[cnt++] = s[i];
21             s[i-1] = s[i-2] = 'a';
22         }
23         else t[cnt++] = s[i];
24     }
25     t[cnt++] = '\0';
26     puts(t);
27     return 0;
28 }
31ms

待补。。

codeforces 858D. Polycarp's phone book【字典树】

题意:有n个不同的九位数的电话号码(非0开头),求每个电话号的最短的能唯一索引该号码的子串。(输入保证所有号码不同)

题解:将每个字符串的所有后缀插入字典树中,对每个号码的查询就先把其所有后缀删除,然后对其所有后缀查找其前缀出现的次数为0的最短号码即为答案。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int N = 70010;
 6 const int M = 10;
 7 const int len = 9;
 8 char a[N][M];
 9 struct Trie {
10     int next[M];
11     int cnt;
12     void init() {
13         cnt = 0;
14         memset(next, -1, sizeof(next));
15     }
16 }T[3150005];
17 int le;
18 void inser(char *s) {
19     int i = 0, p = 0;
20     while(s[i]) {
21         int id = s[i] - '0';
22         if(T[p].next[id] == -1) {
23             T[le].init();
24             T[p].next[id] = le++;
25         }
26         p = T[p].next[id];
27         T[p].cnt++;
28         i++;
29     }
30 }
31 void add(char *s) {
32     int i = 0, p = 0;
33     while(s[i]) {
34         int id = s[i] - '0';
35         p = T[p].next[id];
36         T[p].cnt++;
37         i++;
38     }
39 }
40 void del(char *s) {
41     int i = 0, p = 0;
42     while(s[i]) {
43         int id = s[i] - '0';
44         p = T[p].next[id];
45         T[p].cnt--;
46         i++;
47     }
48 }
49 int query(char *s) {
50     int i = 0, p = 0;
51     while(s[i]) {
52         int id = s[i] - '0';
53         p = T[p].next[id];
54         if(T[p].cnt == 0) return i;
55         i++;
56     }
57     return 11;
58 }
59 int main() {
60     int n, m, i, j, mi, t, l, r;
61     scanf("%d", &n);
62     le = 1;
63     T[0].init();
64     for(i = 1; i<= n; ++i) {
65         scanf("%s", a[i]);
66         for(j = 0; j < len; ++j) inser(a[i]+j);
67     }
68     for(i = 1; i<= n; ++i) {
69         mi = 11;
70         for(j = 0; j < len; ++j) del(a[i]+j);
71         for(j = 0; j < len; ++j) {
72             t = query(a[i]+j);
73             if(t < mi) {mi = t; l = j; r = j+t;}
74         }
75         for(j = 0; j < len; ++j) add(a[i]+j);
76         for(j = l; j <= r; ++j) printf("%c", a[i][j]);
77         puts("");
78     }
79     return 0;
80 }
186ms

 

 

 

 

posted @ 2017-09-19 22:57  GraceSkyer  阅读(420)  评论(0编辑  收藏  举报

~~~~~~ACM大牛语录,激励一下~~~~~~

为了世界的和平,为了女生的安全,我拼命做题,做题,做题!

用最短的时间,刷最多的题!

给我一滴泪,我就看到了你全部的海洋!

seize the hour, seize the day.

人生难免有无奈,幸福走远了,或是感叹幸福来迟了.其实我一直相信,无论手中的幸福是多么微不足道的感觉,我会把握住那每一分,每一秒,当幸福依旧像那百鸟般飞逝,终究无法掌握时,我会感谢它,曾经降临过!

A自己的题,让别人郁闷去吧

WA肠中过,AC心中留 TLE耳边过,AC特别牛

天然的悲苦和伤逝,过去有过,以后还会有

^*^一步一步往上爬^*^

AC就像练级,比赛就像PK. 练级不如PK好玩

其实,世上本没有ACM,AC的人多了,也便有了!

AC无止尽~ Seek you forever~

找呀找呀找水题,找到一个AC一个呀!

AC是检验程序的唯一标准。

真的猛士,敢于直面惨淡的人生,敢于正视淋漓的鲜血……