zoukankan      html  css  js  c++  java
  • Codeforces Round #622 (Div. 2)

    A:

    题意:

    有ABC的三种菜,现在有a个A,b个B,c个C,问能组成多少种不同菜单

    思路:

    abc都大于等于4,肯定是7种,给abc排个序,从大到小举例删减

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 #define il inline
     5 #define it register int
     6 #define inf 0x3f3f3f3f
     7 #define lowbit(x) (x)&(-x)
     8 #define mem(a,b) memset(a,b,sizeof(a))
     9 #define modd 998244353
    10 const int maxn=1e5+10;
    11 int n,m,t;
    12 bool cmp(int a,int b){
    13     return a>b;
    14 }
    15 int main(){
    16     scanf("%d",&t);
    17     while(t--){
    18         int a[3];
    19         scanf("%d%d%d",&a[0],&a[1],&a[2]);
    20         sort(a,a+3,cmp);
    21         if(a[0]>=4 && a[1]>=4 &&a[2]>=4){printf("7
    ");}
    22         else{
    23             int ans=0;
    24             if(a[0]>0){a[0]--;ans++;}
    25             if(a[1]>0){a[1]--;ans++;}
    26             if(a[2]>0){a[2]--;ans++;}
    27             if(a[0]>0 && a[1]>0){a[0]--,a[1]--;ans++;}
    28             if(a[0]>0 && a[2]>0){a[0]--,a[2]--;ans++;}
    29             if(a[2]>0 && a[1]>0){a[2]--,a[1]--;ans++;}
    30             if(a[0]>0 && a[1]>0 && a[2]>0){a[0]--,a[1]--,a[2]--;ans++;}
    31             printf("%d
    ",ans);
    32         }
    33     }
    34     return 0;
    35 }
    View Code

    B:

    题意:

    一个人的在N个人,第一次排名是a,第二次排名是b,总排名分数是a+b,N个人从小到大排序,问他可能在N里面最小排多少名,最大排多少名

    如果同分的话按照同分后面一名的名次-1来算

    思路:

    最大排名maxpos=min(x+y-1,N)

    最小排名,就要比较中间值了,如果x+y<n+1,minpos=1,如果大于就是minpos=min(n,x+y-n+1);

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 #define il inline
     5 #define it register int
     6 #define inf 0x3f3f3f3f
     7 #define lowbit(x) (x)&(-x)
     8 #define mem(a,b) memset(a,b,sizeof(a))
     9 #define modd 998244353
    10 const int maxn=1e5+10;
    11 int n,m,t,x,y;
    12 int main(){
    13     scanf("%d",&t);
    14     while(t--){
    15         scanf("%d%d%d",&n,&x,&y);
    16         int maxx=min(x+y-1,n),k=1,minn=1;
    17         int zhong=n;
    18         zhong++;
    19         if(x+y<zhong){minn=1;}
    20         else{
    21             minn+=(x+y-n);
    22         }
    23         minn=min(minn,n);
    24         printf("%d %d
    ",minn,maxx);
    25     }
    26     return 0;
    27 }
    View Code

    C1:

    题意:

    N长度为1000以内,一个数字两边的数字不能都比他高,最多高一边

    求他最大sum。叙述有问题,直接看样例

    3

    10 6 8

    因为6左右都比他高,选择10 6 6或者6 6  8,sum明显前者高

    所以答案输出10 6 6

    思路:

    暴力

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 #define il inline
     5 #define it register int
     6 #define inf 0x3f3f3f3f
     7 #define lowbit(x) (x)&(-x)
     8 #define mem(a,b) memset(a,b,sizeof(a))
     9 #define modd 998244353
    10 const int maxn=1e5+10;
    11 int n,a[1100],b[1100];
    12 int main(){
    13     scanf("%d",&n);
    14     int pos;
    15     ll maxx=-1;
    16     for(it i=1;i<=n;i++){
    17         scanf("%d",&a[i]);
    18     }
    19     for(it i=1;i<=n;i++){
    20        int zhi=a[i];ll sum=(ll)a[i];
    21        for(it j=i+1;j<=n;j++){
    22         if(a[j]<zhi){
    23             zhi=a[j];
    24         }
    25         sum+=(ll)zhi;
    26         }
    27         zhi=a[i];
    28         for(it j=i-1;j>0;j--){
    29             if(a[j]<zhi){
    30                 zhi=a[j];
    31             }
    32            sum+=(ll)zhi;
    33         }
    34         if(sum>maxx){
    35             maxx=sum;pos=i;
    36         }
    37     }
    38     int zhi=a[pos];b[pos]=a[pos];
    39     for(it i=pos+1;i<=n;i++){
    40         if(a[i]<zhi){
    41             zhi=a[i];
    42         }
    43         b[i]=zhi;
    44     }
    45     zhi=a[pos];
    46     for(it i=pos-1;i>0;i--){
    47         if(a[i]<zhi){
    48             zhi=a[i];
    49         }
    50         b[i]=zhi;
    51     }
    52     for(it i=1;i<=n;i++){
    53         printf(i==n?"%d
    ":"%d ",b[i]);
    54     }
    55     return 0;
    56 }
    View Code

    待补C2DE

    题外话:

    因为这场B题费时太久,wa的太多,在看C2的时候,感觉是个dp,然后wa了两发,时间也来不及直接暴力去过C1了

    D题感觉是个贪心

    B题因为minn的x+y-n+1可能大于n这点,一直没考虑清楚,wa到自闭,幸好最后还是看到了

    这场人也少,比的不好

    upd:

    已补题:C2

  • 相关阅读:
    Next Permutation
    Substring with Concatenation of All Words
    Divide Two Integers
    Remove Duplicates from Sorted Array
    3sum closest
    ThreadPoolExecutor参数与拒绝策略
    多线程情况下ArrayList 如何解决线性安全问题
    ArrayList扩容机制jdk1.8
    SpringCloud--工作流程(好文)
    Java面试——TCP与HTTP
  • 原文地址:https://www.cnblogs.com/luoyugongxi/p/12354237.html
Copyright © 2011-2022 走看看