码迷,mamicode.com
首页 > 其他好文 > 详细

第一周 1.17-1.23

时间:2016-01-17 01:19:41      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

1.17

CF 614 E Necklace

类似于函数图像有两条对称轴 必然是周期的。

如果循环次数是奇数 每一循环节都要是回文 把奇数的放中间 偶数放两边 (所以奇数的不止1个就无解)。

循环次数偶 随便放一个循环节 相邻的对称一下即可。

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 const int maxn = 1e5 + 10;
 5 int num[26];
 6 char s[maxn];
 7 
 8 int gcd(int a, int b)
 9 {
10     return a % b ? gcd(b, a % b) : b;
11 }
12 
13 int main(void)
14 {
15     int n, cnt = 0;
16     scanf("%d", &n);
17     for(int i = 0; i < n; i++) scanf("%d", num + i);
18     int tmp = num[0];
19     for(int i = 1; i < n; i++) tmp = gcd(tmp, num[i]);
20     for(int i = 0; i < n; i++) num[i] /= tmp;
21     if(tmp & 1)
22     {
23         int pos1 = -1;
24         for(int i = 0; i < n; i++)
25         {
26             if(num[i] & 1)
27             {
28                 if(pos1 == -1) pos1 = i;
29                 else
30                 {
31                     puts("0");
32                     for(int k = 0; k < n; k++)
33                         for(int j = 0; j < tmp * num[k]; j++)
34                             putchar(a + k);
35                     puts("");
36                     return 0;
37                 }
38             }
39         }
40         for(int i = 0; i < n; i++)
41         {
42             if(num[i] & 1) num[i]--;
43             for(int j = 0; j < num[i] / 2; j++)
44                 s[cnt++] = a + i;
45         }
46         int l = cnt;
47         if(pos1 != -1) s[cnt++] = a + pos1;
48         for(int j = 1; j <= l; j++) s[cnt++] = s[l-j];
49         s[cnt] = 0;
50         printf("%d\n", tmp);
51         for(int j = 0; j < tmp; j++) printf("%s", s);
52         puts("");
53     }
54     else
55     {
56         for(int i = 0; i < n; i++)
57             for(int j = 0; j < num[i]; j++)
58                 s[cnt++] = a + i;
59         for(int i = cnt; i; i--)
60             s[cnt++] = s[i-1];
61         s[cnt] = 0;
62         printf("%d\n", tmp);
63         for(int j = 0; j < tmp / 2; j++) printf("%s", s);
64         puts("");
65     }
66     return 0;
67 }
Aguin

 

第一周 1.17-1.23

标签:

原文地址:http://www.cnblogs.com/Aguin/p/5136656.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!