• 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
    "); return 0; }
    15     for(int i = 1; i <= 9; i++) { if(m[i] >= 2) f = 0; }
    16     if(!f) printf("Elephant
    ");
    17     else printf("Bear
    ");
    18 
    19     return 0;
    20 }
    View Code

    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
    ");
    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 ? '
    ':' ');
    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
    ");
    42 
    43     return 0;
    44 }
    View Code
    C.MUH and House of Cards
     题意:用牌来搭房子,上面一层的房间数要小于下面一层。现在给你牌的数量,问你房子可能的层数有多少种,详见图。
    解法:我们观察可以发现每层需要的牌数为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
    ", ans);
    24 
    25     return 0;
    26 }
    View Code
     
  • 相关阅读:
    D django 用户认证系统
    vim 跳到指定行
    django 的auth.authenticate返回为None
    git fetch 的简单用法:更新远程代码到本地仓库
    sql语句查询出表里符合条件的第二条记录的方法
    你一定喜欢看的 Webpack 2.× 入门实战
    webpack 从入门到工程实践
    入门Webpack,看这篇就够了
    教程
    常用浏览器如何设置代理服务器上网(图文教程)
  • 原文地址:https://www.cnblogs.com/shiina-mashiro/p/4000029.html
Copyright © 2020-2023  润新知