第十四届蓝桥杯大赛软件赛省赛
C/C++ 大学 B 组
试题A日期统计
题目
题目链接
1 2 3
| 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1 0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3
|
答案:235
思路
考场思路:
暴力2023xxxx约是O(1008)?铁T,根本跑不完。
又因为2023不变,所以先找到2023(眼看,第58个是3,前面出现了202子序列),再对后面遍历所有子序列情况,存到map里。O(414)
最后遍历所有日期,map出现过就res++。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #include<bits/stdc++.h> using namespace std; int a[100]; map<int,int> mp; int res = 0; int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main() { freopen("A.txt","r", stdin); for(int i = 1; i <= 41; i ++) { cin >> a[i]; } for(int i1 = 1; i1 <= 41; i1 ++) { for(int i2 = i1 + 1; i2 <= 41; i2 ++) { for(int i3 = i2 + 1; i3 <= 41; i3 ++) { for(int i4 = i3 + 1; i4 <= 41; i4 ++) { int num = a[i1] * 1000 + a[i2] * 100 + a[i3] * 10 + a[i4]; mp[num] = 1; } } } } for(int i = 1; i <= 12; i ++) { for(int j = 1; j <= days[i]; j ++) { if(mp[100 * i + j] == 1)res ++; } } cout << res; return 0; }
|
可能正解:
对所有天数判断。O(365*100)
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #include<bits/stdc++.h> using namespace std; int a[1000]; int res = 0; int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; bool check(string s) { int num = 1; for(int i = 1; i <= 100; i ++) { string d = to_string(a[i]); if(s[num] == d[0])num ++; if(num > 8)return 1; } return 0; }
int main() { for(int i = 1; i <= 100; i ++) { cin >> a[i]; } for(int i = 1; i <= 12; i ++) { for(int j = 1; j <= days[i]; j ++) { string s = "02023"; if(i < 10)s += "0"; s += to_string(i); if(j < 10)s += "0"; s += to_string(j); if(check(s))res ++; } } cout << res; return 0; }
|
试题 B: 01 串的熵
题目
题目链接
思路
考场思路:
看不懂,心态崩了不想写。
填个114514得了。
可能正解:暴力