1 /*
2 字符串处理:要求解码,然而二维数组开不下,可以直接输出
3 只要在余数的地方判断一下就行了,vector的效率不高
4 另外:感觉麻烦的地方应该纸上写写就清楚了
5 */
6 #include <cstdio>
7 #include <iostream>
8 #include <algorithm>
9 #include <cstring>
10 #include <string>
11 #include <cmath>
12 using namespace std;
13
14 const int MAXM = 1e6 + 10;
15 const int INF = 0x3f3f3f3f;
16 char s[MAXM];
17 char ans[MAXM];
18
19 int main(void) //2015百度之星资格赛 1002 列变位法解密
20 {
21 int n, m, k, cas = 0;
22 int T;
23 scanf ("%d", &T); getchar ();
24 while (T--)
25 {
26 gets (s);
27 scanf ("%d", &m);
28 int len = strlen (s);
29 n = len / m;
30 k = len % m;
31
32 printf ("Case #%d:\n", ++cas);
33 int i = 0, j, l = 0, cnt;
34 while (i < len)
35 {
36 j = i; cnt = 0;
37 while (j < len)
38 {
39 printf ("%c", s[j]); ++l;
40 if (cnt < k) {j += (n + 1); ++cnt;}
41 else j += n;
42 if (l == len) break;
43 }
44 ++i; if (l == len) break;
45 }
46
47 puts (""); getchar ();
48 }
49
50 return 0;
51 }
52
53
54 /*
55 4
56 159263748
57 4
58 Hw doeetrrlloellc adoomm!,my e w
59 7
60 Toodming is best
61 16
62 sokaisan
63 1
64 */
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 /*
2 800多MS
3 */
4 #include <cstdio>
5 #include <iostream>
6 #include <algorithm>
7 #include <cstring>
8 #include <string>
9 #include <cmath>
10 #include <vector>
11 using namespace std;
12
13 const int MAXM = 1e5 + 10;
14 const int INF = 0x3f3f3f3f;
15 char s[MAXM];
16 vector<char> ss[MAXM];
17
18 int main(void) //2015百度之星资格赛 1002 列变位法解密
19 {
20 int n, m, k, cas = 0;
21 int T;
22 scanf ("%d", &T); getchar ();
23 while (T--)
24 {
25 gets (s);
26 //getline (cin, s);
27 scanf ("%d", &m);
28 int len = strlen (s);
29 n = len / m;
30 k = len % m;
31
32 for (int i=0; i<=len; ++i) ss[i].clear ();
33
34 int l = 0; int t = k;
35 for (int j=0; j<m; ++j)
36 {
37 for (int i=0; i<n; ++i)
38 {
39 ss[i].push_back (s[l++]);
40 //ans[i][j] = s[l++];
41 }
42 if (t > 0) ss[n].push_back (s[l++]);
43 t--;
44 }
45
46 printf ("Case #%d:\n", ++cas);
47 for (int i=0; i<n; ++i)
48 {
49 for (int j=0; j<m; ++j)
50 {
51 cout << ss[i][j];
52 //printf ("%c", ans[i][j]);
53 }
54 }
55 for (int i=0; i<k; ++i)
56 cout << ss[n][i];
57 //printf ("%c", ans[n][i]);
58 puts (""); getchar ();
59 }
60
61 return 0;
62 }
63
64
65 /*
66 4
67 159263748
68 4
69 Hw doeetrrlloellc adoomm!,my e w
70 7
71 Toodming is best
72 16
73 sokaisan
74 1
75 */