1019训练赛
A水题:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 const int maxn = 25; 7 8 int main() { 9 int t, n, num; 10 int m; 11 scanf("%d",&t); 12 while(t--) { 13 int sum = 0; 14 scanf("%d %d",&n, &m); 15 while(n--) { 16 scanf("%d",&num); 17 sum += num; 18 } 19 if(sum > m) puts("Warning"); 20 else puts("Safe"); 21 } 22 return 0; 23 }
B:
定义f[n] 为1 + 2 + ……+ n的和
然后告诉你一个数问这个数最少由多少个f[i]组成 并输出i
例如:
20 = (1 + 2 + 3 + 4) + (1 + 2 + 3 + 4)
19 = (1 + 2 + 3) + (1 + 2 + 3 + 4) + (1 + 2)
6 = (1 + 2 + 3)
9 = (1 + 2) + (1 + 2 + 3)
分析:暴力枚举 通过打标可以发现 最多有3层
代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 const int maxn = 15720; 7 int a[maxn + 10]; 8 9 void init() { 10 a[1] = 1; 11 for(int i = 2; i < maxn; i++) { 12 a[i] = a[i - 1] + i; 13 } 14 } 15 16 int er(int num) { 17 int low = 1; int high = maxn - 1; 18 while(low <= high) { 19 int mid = (low + high) >> 1; 20 if(a[mid] > num) { 21 high = mid - 1; 22 } else { 23 low = mid + 1; 24 } 25 } 26 return high; 27 } 28 29 bool dfs(int de, int n, int ceng) { 30 int num = er(n); 31 if(a[num] == n) { 32 printf("%d", num); 33 return true; 34 } 35 if(de > ceng || n <= 0) return false; 36 for(int k = 0; k < maxn; k++) { 37 if(num > k && dfs(de + 1, n - a[num - k], ceng)) { 38 printf(" %d", num - k); 39 return true; 40 } 41 } 42 return false; 43 } 44 45 int main() { 46 init(); 47 int t; int n; 48 scanf("%d",&t); 49 while(t--) { 50 scanf("%d",&n); 51 for(int i = 1; i <= 10; i++) { 52 if(dfs(1, n, i)) { 53 puts(""); 54 break; 55 } 56 } 57 } 58 return 0; 59 }
D:模拟水题
代码:
1 #include <algorithm> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <ctime> 5 #include <iostream> 6 7 #define mp make_pair 8 #define pb push_back 9 using namespace std; 10 11 const int N = 10020; 12 struct A { 13 int x; 14 int id; 15 string date; 16 int score; 17 bool operator<(const A &t) const { 18 if (score != t.score) 19 return score > t.score; 20 if (date != t.date) 21 return date < t.date; 22 return id < t.id; 23 } 24 } a[N]; 25 int n; 26 int ans[N]; 27 char cmd[50]; 28 int main() { 29 int cas, i; 30 scanf("%d", &cas); 31 while (cas--) { 32 scanf("%d", &n); 33 for (i = 1; i <= n; i++) { 34 scanf("%d%s%d", &a[i].id, cmd, &a[i].score); 35 a[i].date = cmd; 36 a[i].x = i; 37 } 38 sort(a + 1, a + 1 + n); 39 int cnt = 0; 40 for (i = 1; i <= n; i++) 41 if (a[i].score) 42 cnt++; 43 int L6 = cnt * 3 / 100, L5 = cnt * 7 / 100, L4 = cnt * 20 / 100, L3 = 44 cnt * 30 / 100; 45 for (i = 1; i <= n; i++) { 46 if (!a[i].score) 47 ans[a[i].x] = 1; 48 else if (i <= L6) 49 ans[a[i].x] = 6; 50 else if (i <= L6 + L5) 51 ans[a[i].x] = 5; 52 else if (i <= L6 + L5 + L4) 53 ans[a[i].x] = 4; 54 else if (i <= L6 + L5 + L4 + L3) 55 ans[a[i].x] = 3; 56 else 57 ans[a[i].x] = 2; 58 } 59 for (i = 1; i <= n; i++) 60 printf("LV%d\n", ans[i]); 61 } 62 }
I:模拟 水题
代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 int main() { 7 int t; 8 string s3 = "Hello, world!"; 9 scanf("%d",&t); 10 getchar(); 11 while(t--) { 12 string s1, s2; 13 getline(cin, s1); 14 for(int i = 0; s1[i]; i++) { 15 if(s1[i] == '!') { 16 s2 += s3; 17 } else if(s1[i] == '_') { 18 s2 += s1; 19 } 20 } 21 if(s1 == s2) { 22 puts("Yes"); 23 } else { 24 puts("No"); 25 } 26 } 27 return 0; 28 }
h是个大数论 看题解看的脑袋都大了 回寝室想想
周洲过了个大dp?这个回去也想想
还有一个题跟高放说错了题意 抱歉了
今天好没状态啊
回寝了。