• Codeforces Round #428 (Div. 2)


    A

    题意:给糖果每天最多给8个,给出每天给的个数,问k个糖果最少多少天给完,可以累计,比如我第一天给10个,但我最多可以给8个,另外2个可以累计到后面,如果第二天是6个,但是我可以给8个,就这吊毛意思

    思路:暴力模拟

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int a[102];
     4 int main(){
     5     int n,k;
     6     cin>>n>>k;
     7     for(int i=1;i<=n;i++){
     8         scanf("%d",&a[i]);
     9     }
    10     int ss=0;
    11     for(int i=1;i<=n;i++){
    12         if(a[i]<8) {
    13                 k-=a[i];
    14                 k-=min(ss,8-a[i]);
    15                 ss=max(0,ss-(8-a[i]));
    16         }
    17         else {
    18             k-=8;ss+=(a[i]-8);
    19         }
    20         if(k<=0){
    21             cout<<i<<endl;return 0;
    22         }
    23     }
    24     cout<<-1<<endl;
    25 }

    B

    题意:每排有 {1, 2}, {3, 4}, {4, 5}, {5, 6} or {7, 8}.的相邻位置,相邻位置不能坐不同组的军人,问是否可行

    思路:肯定是先把中间的四个位置能坐就坐,然后中间最多坐3个,2边还是2个,即能坐2个人的位置s2个,能坐一个人的位置s1个,注意:当我s1不够,我一个人可以消耗一个2个人的位置,s2--,当我s2不够的话,我可以消耗2个s1的位置

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 int a[103];
     5 
     6 int main(){
     7     int n,k;
     8     scanf("%d%d",&n,&k);
     9     int m=1;
    10     for(int i=1;i<=k;i++){
    11          scanf("%d",&a[i]);
    12          while(a[i]>=4&&m<=n){
    13              a[i]-=4;
    14              m++;
    15          }
    16 
    17     }
    18     int s2=n*2+(n-m+1);
    19     int s1=(n-m+1);
    20    // cout<<s1<<" "<<s2<<endl;
    21     for(int i=1;i<=k;i++){
    22 
    23         if(a[i]==0) continue;
    24         else {
    25             int x=a[i]/2;
    26             if(s2!=0){
    27                 if(s2>x) s2-=x;
    28                 else {
    29                     x-=s2;s2=0;
    30                 }
    31             }
    32             if(s2==0){
    33                 s1-=2*x;
    34             }
    35             if(a[i]%2==1) {
    36 
    37                 if(s1==0) s2--;
    38                 else s1--;
    39            // cout<<a[i]<<" "<<s1<<" "<<s2<<endl;
    40             }
    41         }
    42         if(s1<0||s2<0){
    43             cout<<"NO"<<endl;return 0;
    44         }
    45     }
    46     cout<<"YES"<<endl;
    47 }

    C

    题意:一棵树,从1号节点出发,等概率到他的子节点,只能走没到过的地方,会一直走,到不能走为止,问距离的期望是多少

    思路:跑一遍就行了,记得不要看见函数不加return 心里就不舒服

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 vector<int > a[100005];
     5 int n;
     6 double sum;
     7 
     8 void dfs(int u,int fa,double y,int d){
     9     if(a[u].size()==1){
    10        // printf("%d %.4lf
    ",d,y);
    11         sum+=y*d;
    12        // return ; //就是这个return 啊,WA到死啊
    13     }
    14     for(int i=0;i<a[u].size();i++){
    15         int v=a[u][i];
    16         if(v==fa) continue;
    17         if(u==1) dfs(v,u,y/a[u].size(),d+1);
    18         else
    19         dfs(v,u,y/(a[u].size()-1),d+1);
    20     }
    21 }
    22 
    23 int main(){
    24     scanf("%d",&n);
    25     int x,y;
    26         for(int i=1;i<n;i++){
    27         scanf("%d%d",&x,&y);
    28         a[x].push_back(y);
    29         a[y].push_back(x);
    30     }
    31     dfs(1,0,1.0,0);
    32     printf("%.6lf
    ",sum);
    33 }
  • 相关阅读:
    单机 Nexus 部署
    Docker 部署 3 节点 ES 集群
    Harbor 高可用部署
    Python 第四次实验
    es入门
    Golang的Test的用法
    spring elastic
    golang下载包的时候出现 dial tcp 142.251.43.17:443: i/o timeout时候解决
    Java加密并压缩文件
    feign调用添加header
  • 原文地址:https://www.cnblogs.com/hhxj/p/7352530.html
Copyright © 2020-2023  润新知