首页 > 代码库 > Codeforces Round #269 (Div. 2) solution
Codeforces Round #269 (Div. 2) solution
A.MUH and Sticks
题意:给你6根棍子,问你能否拼出熊或者象。要拼出熊首先要有4个长度一样的棍子当腿,另外2个长度不同的棍子当身体和脑袋。拼大象也需要4个长度一样的棍子当腿,但需要另外2个长度相同的棍子当身体和脑袋。
解法:详见代码。
代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <set> 4 #include <algorithm> 5 using namespace std; 6 7 int m[11]; 8 9 int main() {10 int a;11 for(int i = 0; i < 6; i++) { scanf("%d", &a); m[a]++; }12 int f = 0;13 for(int i = 1; i <= 9; i++) { if(m[i] >= 4) m[i] -= 4, f = 1; }14 if(!f) { printf("Alien\n"); return 0; }15 for(int i = 1; i <= 9; i++) { if(m[i] >= 2) f = 0; }16 if(!f) printf("Elephant\n");17 else printf("Bear\n");18 19 return 0;20 }
B.MUH and Important Things
题意:给你一些任务,每个任务有一个难度。问你这些任务按照难度排序能否排出至少3个不同的序列。
解法:显然若有3个或以上任务难度相同我们就可以构造出答案,若没有3个任务难度相同有两组2个难度相同的任务也可构造出答案,否则无解。
代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <set> 4 #include <algorithm> 5 using namespace std; 6 7 pair<int, int> a[2010]; 8 int o[3][2010], n; 9 10 void ot() {11 printf("YES\n");12 for(int i = 0; i < 3; i++) {13 for(int j = 0; j < n; j++) printf("%d%c", o[i][j], j == n - 1 ? ‘\n‘:‘ ‘);14 }15 }16 17 int main() {18 int k = 1;19 scanf("%d", &n);20 for(int i = 0; i < n; i++) {21 scanf("%d", &a[i].first);22 a[i].second = i + 1;23 }24 sort(a, a + n);25 for(int i = 0; i < n; i++) o[0][i] = o[1][i] = o[2][i] = a[i].second;26 for(int i = 0; i < n - 1; i++) {27 if(i + 2 < n && a[i].first == a[i + 1].first && a[i + 2].first == a[i + 1].first) {28 o[1][i] = a[i + 1].second, o[1][i + 1] = a[i].second;29 o[2][i] = a[i + 2].second, o[2][i + 2] = a[i].second;30 ot();31 return 0;32 } else if(a[i].first == a[i + 1].first){33 o[k][i] = a[i + 1].second, o[k][i + 1] = a[i].second;34 k++;35 if(k == 3) {36 ot();37 return 0;38 }39 }40 }41 printf("NO\n");42 43 return 0;44 }
C.MUH and House of CardsView Code
题意:用牌来搭房子,上面一层的房间数要小于下面一层。现在给你牌的数量,问你房子可能的层数有多少种,详见图。
解法:我们观察可以发现每层需要的牌数为2 + 3 * k,k为房子数-1。那么我们可以枚举层数,然后判断能否满足题目要求,即下面一层的k至少要是上面一层的k+1,详见代码。
代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <set> 4 #include <algorithm> 5 using namespace std; 6 7 pair<int, int> a[2010]; 8 int o[3][2010], n; 9 10 int main() {11 long long n, k = 1, l = 0;12 scanf("%I64d", &n);13 int ans = 0;14 for(;;k++) {15 long long m = n;16 m -= 2 * k;17 if(m % 3 != 0) { l += k; continue; }18 m /= 3;19 if(m >= l) ans++;20 else break;21 l += k;22 }23 printf("%d\n", ans);24 25 return 0;26 }
Codeforces Round #269 (Div. 2) solution
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。