zoukankan      html  css  js  c++  java
  • Codeforces #377 Div2

    打得还不错的一场CF,题目质量也很高,今后还要继续努力

    A题:

    题意:给定一个数k,让其乘一个最小的数,使乘得以后的数要不被10整除,要不减去r以后被10整除,求这个最小的数

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <string>
     5 #include <vector>
     6 #include <algorithm>
     7 #include <set>
     8 #include <map>
     9 #include <bitset>
    10 #include <cmath>
    11 #include <queue>
    12 #include <stack>
    13 using namespace std;
    14 int r,k;
    15 int main()
    16 {
    17     while(cin>>r>>k)
    18     {
    19         int pos;
    20         for(int i=1;i<=10;i++){
    21             int t=i*r;
    22             if((t%10==0)||((t-k)%10==0))
    23             {
    24                 pos=i; break;
    25             }
    26         }
    27         cout<<pos<<endl;
    28     }
    29     return 0;
    30 }
    View Code

    B题:

    题意:给定n个数和一个数k,求最少修改使任意相邻的两个数的和大于等于k

    分析:对于任意两个数和大于等于k的不做修改,对于小于k的,修改后一个数即可,使其加上k-(二者的和)

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <string>
     5 #include <vector>
     6 #include <algorithm>
     7 #include <set>
     8 #include <map>
     9 #include <bitset>
    10 #include <cmath>
    11 #include <queue>
    12 #include <stack>
    13 using namespace std;
    14 const int maxn=550;
    15 int a[maxn],b[maxn];
    16 int n,k;
    17 int main()
    18 {
    19     while(cin>>n>>k)
    20     {
    21         memset(a,0,sizeof(a));
    22         memset(b,0,sizeof(b));
    23         for(int i=1;i<=n;i++)
    24             cin>>a[i];
    25         int cnt=0;
    26         for(int i=1;i<=n-1;i++){
    27             if(a[i]+a[i+1]>=k){
    28                 b[i]=a[i];
    29             }else{
    30                 b[i]=a[i];
    31                 int t=k-a[i]-a[i+1];
    32                 cnt+=t;
    33                 a[i+1]+=t;
    34             }
    35         }
    36         b[n]=a[n];
    37         cout<<cnt<<endl;
    38         for(int i=1;i<=n-1;i++)
    39             printf("%d ",b[i]);
    40         printf("%d
    ",b[n]);
    41     }
    42     return 0;
    43 }
    View Code

    C题:

    题意:给定吃的三餐的次数,确定最少有多少餐没吃

    分析:如果三餐相等就是0,否则就是根据最多的那一餐来决定

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <string>
     5 #include <vector>
     6 #include <algorithm>
     7 #include <set>
     8 #include <map>
     9 #include <bitset>
    10 #include <cmath>
    11 #include <queue>
    12 #include <stack>
    13 using namespace std;
    14 long long MAX(long long a,long long b,long long c)
    15 {
    16     long long d=max(a,b);
    17     long long e=max(c,d);
    18     return e;
    19 }
    20 long long b,d,s;
    21 int main()
    22 {
    23     while(cin>>b>>d>>s)
    24     {
    25         long long h=MAX(b,d,s);
    26         long long cnt;
    27         if(b==d&&d==s){
    28             cout<<"0"<<endl;
    29             continue;
    30         }
    31         if(h==b){
    32             cnt=max((long long)0,(b-1-d))+max((b-1-s),(long long)0);
    33         }else if(h==d){
    34             cnt=max((long long)0,(d-1-b))+max((long long)0,(d-1-s));
    35         }else{
    36             cnt=max((long long)0,(s-1-b))+max((long long)0,(s-1-d));
    37         }
    38         cout<<cnt<<endl;
    39     }
    40     return 0;
    41 }
    View Code

    D题:

    暂时还没做

    E题:

    题意:有n台电脑,和m个插座,如果二者的power相等,就可以进行连接,插座可以加适配器,没加一次适配器以后power变为,求最多可以适配多少台电脑,在此基础上最少需要的适配器数量。同时输出每一个插座的适配器数量,以及每一台电脑和哪个插座适配

    分析:我们需要把电脑按照power从大到小进行排序,然后用优先队列来维护插座,如果电力值大于电脑,变为,然后在入队,如果等于,直接适配

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <string>
      5 #include <vector>
      6 #include <algorithm>
      7 #include <set>
      8 #include <map>
      9 #include <bitset>
     10 #include <cmath>
     11 #include <queue>
     12 #include <stack>
     13 using namespace std;
     14 const int maxn=200020;
     15 const int INF=1<<30;
     16 int n,m;
     17 typedef struct T{
     18     int num,id;
     19 }T;
     20  T p[maxn];
     21 int s[maxn]; //电脑和插座需要的power
     22 typedef struct P{
     23     int x,num,id;
     24     friend bool operator<(P a,P b)
     25     {
     26         if(a.x==b.x)
     27             return a.num>b.num;
     28         return a.x<b.x;  //大顶堆
     29     }
     30 }P;
     31 typedef struct Point{
     32     int cnt,id;
     33 }Point;
     34 Point vis[maxn];
     35 int vis1[maxn];
     36 bool cmp(T  a,T b)
     37 {
     38     return a.num>b.num;
     39 }
     40 int a[maxn];
     41 int b[maxn];
     42 int main()
     43 {
     44     while(cin>>n>>m)
     45     {
     46         priority_queue<P> que;
     47         for(int i=1;i<=maxn;i++){
     48             vis[i].cnt=0,vis[i].id=0;
     49         }
     50         for(int i=1;i<=n;i++){
     51             scanf("%d",&p[i].num);
     52             p[i].id=i;
     53         }
     54         for(int i=1;i<=m;i++)
     55         {
     56             scanf("%d",&s[i]);
     57             P e;
     58             e.x=s[i];
     59             e.num=0;
     60             e.id=i;
     61             que.push(e);
     62         }
     63         memset(vis1,0,sizeof(vis1));
     64         sort(p+1,p+1+n,cmp);
     65         for(int i=1;i<=n;i++){
     66             int t,q,h;
     67             while(que.top().x>p[i].num&&!que.empty()){
     68                 P s=que.top();
     69                 que.pop();
     70                 t=s.x,q=s.num,h=s.id;
     71                 t=(t+1)/2;
     72                 q++;
     73                 s.x=t,s.num=q,s.id=h;
     74                 que.push(s);
     75             }
     76             if(que.empty())  break;
     77             if(que.top().x==p[i].num){
     78                 vis[i].cnt=que.top().num;
     79                 vis[i].id=que.top().id;
     80                 vis1[i]=1;
     81                 que.pop();
     82             }else{
     83                 continue;
     84             }
     85         }
     86         int c=0,u=0;
     87         for(int i=1;i<=n;i++){
     88             if(vis1[i]){
     89                 ++c;
     90                 u+=vis[i].cnt;
     91             }
     92         }
     93         printf("%d %d
    ",c,u);
     94         memset(a,0,sizeof(a));
     95         for(int i=1;i<=n;i++){
     96                 a[vis[i].id]=vis[i].cnt;
     97         }
     98         for(int i=1;i<=m;i++){
     99             printf("%d ",a[i]);
    100         }
    101         printf("
    ");
    102         memset(b,0,sizeof(b));
    103         for(int i=1;i<=n;i++){
    104             b[p[i].id]=vis[i].id;
    105         }
    106         for(int i=1;i<=n;i++)
    107             printf("%d ",b[i]);
    108         cout<<endl;
    109     }
    110     return 0;
    111 }
    View Code
  • 相关阅读:
    「2020 新手必备 」极速入门 Retrofit + OkHttp 网络框架到实战,这一篇就够了!
    结合源码,重温 Android View 的事件处理知多少 ?
    Android 这 13 道 ContentProvider 面试题,你都会了吗?
    17 个必须掌握的 BroadcastReceiver 知识点「建议收藏」
    23 个重难点突破,带你吃透 Service 知识点「长达 1W+ 字」
    Activity 的 36 大难点,你会几个?「建议收藏」
    Python time模块
    vue项目的创建
    githunb和码云生成/添加SSH公钥
    weex打包apk步骤
  • 原文地址:https://www.cnblogs.com/wolf940509/p/5992593.html
Copyright © 2011-2022 走看看