• Codeforces Round #219 (Div. 2) 解题报告


    Problem A Collecting Beats is Fun

    题意:就是音乐游戏在4*4的网上一些格子需要在固定的时间点,告诉你一只手同一时间能点几个。问你能不能通关(就是一个不丢)

    思路:水题 。我开了一个数组统计一下每个时间出现的格子数。最后扫一遍判断有没有不能点完的就OK了

    代码如下:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <algorithm>
     6 #include <utility>
     7 #include <queue>
     8 #include <vector>
     9 #include <stack>
    10 #define INF 0x7fffffff
    11 #define ll long long
    12 #define eps 1E-6
    13 
    14 using namespace std;
    15 
    16 int main()
    17 {
    18 //    freopen("in.txt", "r", stdin);
    19     int n, cnt[11];
    20     while(scanf("%d", &n)!=EOF){
    21         memset(cnt, 0, sizeof cnt);
    22         for(int i=0; i<4; i++){
    23             for(int j=0; j<4; j++){
    24                 char temp;
    25                 cin >> temp;
    26                 if(temp!='.') cnt[temp-'0']++;
    27             }
    28         }
    29         int ans = 1;
    30         for(int i=0; i<10; i++){
    31             if(cnt[i]>2*n)ans = 0;
    32         }
    33         if(ans) cout << "YES" << endl;
    34         else cout << "NO" << endl;
    35     }
    36     return 0;
    37 }
    View Code

    Problem B Making Sequences is Fun

    题意:给你一个m你要找(m,m+1,。。。)这个数列。每往这个数列中加入一个数花费是S(x)*k,S(x)表示数字的位数,问你最长能加多少个数?

    思路:我用的方法很暴力,首先看m为几位数假设为a位,那么看看把a位中比m大的全部加进来,若不行那直接算出来多少个数。若可以加则从a+1开始枚举,直到剩下来的费用已经不能把b位的数全加进来了。这是在算一下b位的书能加几个就OK了。

    代码如下:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <cmath>
     6 #include <algorithm>
     7 #include <utility>
     8 #include <queue>
     9 #include <vector>
    10 #include <stack>
    11 #define INF 0x7fffffff
    12 #define ll long long
    13 #define eps 1E-6
    14 
    15 using namespace std;
    16 
    17 ll w, m ,k, ans, cost[30];
    18 
    19 ll Pow(ll a, ll b){
    20     ll ret = 1;
    21     while(b--){
    22         ret*=a;
    23     }
    24     return ret;
    25 }
    26 
    27 int main()
    28 {
    29 //    freopen("in.txt", "r", stdin);
    30 
    31     memset(cost, 0, sizeof cost);
    32     for(ll i=1; i<21; i++){
    33         cost[i] = Pow(10, i);
    34         for(int j=1; j<i; j++){
    35             cost[i]-=cost[j];
    36         }
    37     }
    38     while(cin >> w >> m >> k){
    39         ll mon = w/k;
    40         ll ii;
    41         for(ii=1; ii<20; ii++){
    42             if(Pow(10, ii)>m)break;
    43         }
    44         ll cc = (Pow(10, ii)-m)*ii, ans = 0;
    45         if(mon<=cc) ans = mon/ii;
    46         else{
    47             mon-=cc;
    48             ans+=Pow(10, ii)-m;
    49             while(mon>0){
    50                 ++ii;
    51                 if(cost[ii]*ii<=mon){
    52                     mon-=cost[ii]*ii;
    53                     ans+=cost[ii];
    54                 }else break;
    55             }
    56             ans+=mon/ii;
    57         }
    58         cout << ans << endl;
    59     }
    60     return 0;
    61 }
    View Code

     Problem C Counting Kangaroos is Fun

    题意:一个袋鼠可以装下另一个袋鼠当且仅当他的体重是另外一个的两倍。在袋鼠口袋里有东西的时候就不能再装别的东西或者被别的袋鼠装了,一个袋鼠被装了以后就看不见了。问你最少会看见多少只袋鼠?

    思路:二分答案。每一次判断答案是否可行就是看前mid个是否能被后mid个装下(排序好的)。前两天在刷uva今天补上这一题。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <queue>
     6 #include <vector>
     7 #include <stack>
     8 #define LEN 1000100
     9 #define INF 0x7fffffff
    10 #define eps 1e-6
    11 #define ll long long
    12 
    13 using namespace std;
    14 
    15 int a[LEN], n;
    16 
    17 void debug()
    18 {
    19     for(int i=0; i<n; i++){
    20         cout << a[i] << ' ';
    21     }cout << endl;
    22 }
    23 
    24 bool check(int pos){
    25     for(int i=0; i<pos; i++){
    26         if((2*a[i])>a[n-pos+i])return false;
    27     }
    28     return true;
    29 }
    30 
    31 int main()
    32 {
    33     freopen("in.txt", "r", stdin);
    34 
    35     while(scanf("%d" ,&n)!=EOF){
    36         for(int i=0; i<n; i++){
    37             scanf("%d", &a[i]);
    38         }
    39         sort(a, a+n);
    40         int l = 0, r = n/2;
    41         while(l<r){
    42             int mid = (l+r+1)/2;
    43             if(check(mid))l = mid;
    44             else r = mid-1;
    45         }
    46         cout << n-l << endl;
    47     }
    48     return 0;
    49 }
    View Code
     
    奔跑吧!少年!趁着你还年轻
  • 相关阅读:
    Element学习
    top level element is not completed
    IntelliJ IDEA 使用心得与常用快捷键
    MVC下的DAO接口类和SERVICE接口类区别?
    Emmet初探2
    Servlet和Android网络交互基础(3)
    A-Frame WebVR开发新手教程
    重温java中的String,StringBuffer,StringBuilder类
    Android 常见面试题
    <html>
  • 原文地址:https://www.cnblogs.com/shu-xiaohao/p/3473989.html
Copyright © 2020-2023  润新知