A.cpp
基本思路:一个个写例发现是个循环群,不断的取构造 3的倍数来计算循环群所对应的结果。
1#include<iostream>
2using namespace std;
3int n, ans, a;
4int main()
5{
6 cin >> n;
7 while(n--)
8 {
9 cin >> a;
10 ans = 1e9 + 1;
11 if(a % 3)
12 {
13 for(int i = -2; i < 3; i++)
14 if((a-i*2) % 3 == 0)
15 ans = min(ans,abs((a-i*2)/3) + abs(i));
16 }
17 else ans = a / 3;
18 cout << ans << endl;
19 }
20 return 0;
21}
B.cpp
基本思路:对于新读入的一个数,判断最小的位置是否改变,若没有改变就改变,若已改变就查 m+1-ai
1#include <iostream>
2#include <string>
3using namespace std;
4
5int main()
6{
7 int t;
8 cin >> t;
9 while (t--) {
10 int m, n;
11 cin >> m >> n;
12 string cons(n, 'B');
13 while (m--) {
14 int k;
15 cin >> k;
16 k--;
17 if (k >= n / 2) {
18 k = n - 1 - k;
19 }
20 if (cons[k] == 'B') {
21 cons[k] = 'A';
22 } else if (cons[n - 1 - k] == 'B') {
23 cons[n - 1 - k] = 'A';
24 }
25 }
26 cout << cons << endl;
27 }
28 return 0;
29}
C.cpp
基本思路:水题,主要是 CNN 准确率计算,对于一个矩阵来说,需要计算正确元素的个数 / 总元素的个数。
1#include<iostream>
2#include<string>
3using namespace std;
4int m;
5double correct = 0, n = 0;
6string a,b,c;
7void judge(string a, string b)
8{
9 for(int i = 0; i < a.length(); i++)
10 if(a[i] != b[i]) return;
11 correct++;
12}
13int main()
14{
15 cin >> n >> m;
16 getline(cin, c);
17 for(int i = 0; i < n; i++)
18 {
19 getline(cin, a);
20 getline(cin, b);
21 judge(a, b);
22 }
23 printf("%.2lf%%\n", correct/n*100);
24 return 0;
25}
D.cpp
基本思路: 此处尽可能大是讲日期尽可能的分成二等段即 abs(l1 - l2)
和 abs(l2 - l3)
差最小的时候。
1#include <iostream>
2using namespace std;
3
4int main()
5{
6 int t;
7 cin >> t;
8 while (t--) {
9 int n;
10 cin >> n;
11 n -= 4;
12 int ans;
13 switch (n % 3) {
14 case 0: case 1:
15 ans = n / 3 - 1;
16 break;
17 default: // 2
18 ans = n / 3;
19 break;
20 }
21 cout << ans << endl;
22 }
23 return 0;
24}
E.cpp
基本思路:仔细想想,如果有 1 的话,左右两边合并成什么都不重要了,我只要保证最后一次合并有个 1 存在就行,而且题目限制 k <= n. 所以如果有 1 的话,总可以成功。
1#include<iostream>
2using namespace std;
3int t, n, k, a, num;
4int main()
5{
6 cin >> t;
7 while(t--)
8 {
9 cin >> n >> k;
10 num = 0;
11 for(int i = 0 ; i < n; i++)
12 {
13 cin >> a;
14 if(a == 1) num++;
15 }
16 if(num == 0) cout << "NO" << endl;
17 else cout << "YES" << endl;
18 }
19 return 0;
20}
F.cpp
基本思路: 模拟水题,对于回文日期,直接从年份开始++,然后倒序复制到月份和日上,剩下的判断日期是否合理就行,对于这种解法,需要考虑 20200101 这类日期。
1#include <iostream>
2using namespace std;
3char arr[8];
4int data[8];
5int md[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
6bool flag1 = 1, flag2 = 1;
7void solve()
8{
9 while(1)
10 {
11 data[3] ++;
12 if(data[3] == 10)
13 {
14 data[2]++;
15 data[3] = 0;
16 }
17 if(data[2] == 10)
18 {
19 data[1]++;
20 data[2] = 0;
21 }
22 if(data[1] == 10)
23 {
24 data[0]++;
25 data[1] = 0;
26 }
27 int year = 0;
28 for(int i = 0; i < 4; i++)
29 {
30 data[7-i] = data[i];
31 year = year * 10 + data[i];
32 }
33 int month = data[4] * 10 + data[5];
34 int day = data[6] * 10 + data[7];
35 if(year % 400) md[1] = 28;
36 else md[1] = 29;
37 if(month > 12 || md[month - 1] < day) continue;
38 if(flag1 || flag2)
39 {
40 if(flag1)
41 {
42 for(int i = 0; i < 8; i++)
43 cout << data[i] ;
44 cout << endl;
45 flag1 = 0;
46 }
47 if(flag2)
48 {
49 if(data[0] == data[2] && data[1] == data[3] && data[1] != data[2])
50 {
51 for(int i = 0; i < 8; i++)
52 cout << data[i] ;
53 cout << endl;
54 flag2 = 0;
55 }
56 }
57 }
58 if(!flag1 && !flag2) break;
59 }
60}
61int main()
62{
63 for(int i = 0; i < 8; i++)
64 {
65 cin >> arr[i];
66 data[i] = arr[i] - '0';
67 }
68 for(int i = 3; i >= 0 ;i--)
69 {
70 if(data[i] > data[7 - i])
71 {
72 data[3]--;
73 break;
74 }
75 }
76 solve();
77 return 0;
78}
F.c
1#include<stdio.h>
2int Ahuiwendate(int n) {
3 while (n) {
4 n++;
5 int year = n / 10000;
6 int day = n % 100;
7 int month = (n % 10000) / 100;
8 int uday = (day % 10) * 10 + day / 10;
9 int umonth = (month % 10) * 10 + month / 10;
10 if (year / 100 == uday && day < 31 && day > 0 && year % 100 == umonth && month < 13 && month > 0) {
11 break;
12 }
13 }
14 return n;
15}
16int Bhuiwendate(int n)
17{
18 while (n)
19 {
20 n++;
21 int year = n / 10000;
22 int day = n % 100;
23 int month = (n % 10000) / 100;
24 int uday = (day % 10) * 10 + day / 10;
25 int umonth = (month % 10) * 10 + month / 10;
26 if (day == month && year / 100 == uday && day < 31 && day > 0 && year % 100 == umonth && month < 13 && month > 0)
27 {
28 break;
29 }
30 }
31 return n;
32}
33int main()
34{
35 int n;
36 scanf("%d", &n);
37 int x = Ahuiwendate(n);
38 printf("%d\n", x);
39 int y = Bhuiwendate(n);
40 printf("%d\n", y);
41 return 0;
42}