首页 > 代码库 > 1019训练赛
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 else57 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?这个回去也想想
还有一个题跟高放说错了题意 抱歉了
今天好没状态啊
回寝了。
1019训练赛
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。