• 2020.4.5 个人rating赛 解题+补题报告


    A The number of positions

     1.题意

      给定n个人从1到n排队,其中一个人前面不少a人,后面不超过b人,问这个人可选的位置有多少个。

     2.题解

      满足两个条件,前面大于等于a人,即可选位置至多为从a+1往后共n-a个,后面小于等于b人,即可选位置至多为从后往前共b+1个,取交集。

     3.代码

      

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,a,b;
     4 int main(){
     5     cin>>n>>a>>b;
     6     if(n-a>1+b)
     7         cout<<1+b<<endl;
     8     else
     9         cout<<n-a<<endl;    
    10     
    11     return 0;
    12 }

    B Permutations

     1.题意

       给定n个k位数,可以任意打乱数字之间的顺序,允许前导零,使在同一种排列规则下的最大值和最小值之差最小。

     2.题解

      全排列函数next_permutation,用二维数组存各数各位,一维数组存各数,ans维护最小值。

     3.代码

    #include<bits/stdc++.h>
    #define inf 0x3f3f3f3f
    using namespace std;
    int n,k;
    int a[10][10];
    int b[10][10];
    int c[10];
    int d[]={1,2,3,4,5,6,7,8,9};
    int ans=inf;
    void f(int n){
        int sum=0;
        for(int i=8;i>=0;i--){
            sum*=10;
            sum+=b[n][i];
        }
        c[n]=sum;
        return ;
    }
    int main(){
        cin>>n>>k;
        char ch;
        for(int i=0;i<n;i++){
            for(int j=0;j<k;j++){
                cin>>ch;
                a[i][j]=ch-'0';
            }
        }
    
        int mmin=inf;
    
        while(1){
            for(int i=0;i<n;i++)
                for(int j=0;j<k;j++)
                    b[i][j]=a[i][d[j]-1];
            
            for(int i=0;i<n;i++)
                f(i);
            
            sort(c,c+n);
            mmin=min(mmin,c[n-1]-c[0]);
            if(!next_permutation(d,d+k))
                break;
        }
        cout<<mmin<<endl;
        
        return 0;
    }

    D cAPS lOCK

     1.题意

       给定一个单词,如果所有字母都是大写或只有第一个字母是小写,将这个单词的所有字母大小写反转后输出,否则按照原来的输入将这个单词输出。

     2.题解

       先忽略第一个字母,如果后面的字母有小写,则将单词原样输出,否则反转输出。

     3.代码

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 string s;
     4 int main(){
     5     cin>>s;
     6     int flag=1;
     7     for(int i=1;i<s.size();i++){
     8         if(s[i]>'Z'){
     9             flag=0;
    10             break;
    11         }
    12     }
    13     if(flag){
    14         for(int i=0;i<s.size();i++){
    15             if(s[i]<95)
    16                 printf("%c",s[i]+32);
    17             else
    18                 printf("%c",s[i]-32);
    19         }
    20             
    21     }
    22     else{
    23         for(int i=0;i<s.size();i++)
    24             printf("%c",s[i]);
    25     }
    26     
    27     return 0;
    28 }

    E Opposites Attract

     1.题意

       给定n个数,两个数若相加位0,则它们可以配对,问一共有几对。

     2.题解

       用map存储,0特判。

     3.代码

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 mp<int,int> mp;
     5 int main(){
     6     int n;
     7     cin>>n;
     8     for(int i=0;i<n;i++){
     9         int a;
    10         cin>>a;
    11         mp[a]++;
    12     }
    13     ll sum=mp[0]*(mp[0]-1)/2; //组合数cn2 拆开 
    14     for(int i=1;i<=10;i++) //数据范围-10<=ti<=10 
    15         sum+=mp[i]*mp[-i];
    16         
    17     cout<<sum<<endl;
    18     
    19     return 0;
    20 }

    F The World is a Theatre

     1.题意

       在n个男孩和m个女孩中选择t人,其中至少有4个男孩和1个女孩,问共有多少种选择方式。

     2.题解

       组合数问题。

     3.代码

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 ll c(ll n,ll m){
     5     ll fac=1;
     6     for(int i=1;i<=m;i++)
     7         fac=fac*(n-m+i)/i;
     8     return fac;
     9 }
    10 ll n,m,t,ans;
    11 int main(){
    12     cin>>n>>m>>t;
    13     for(ll i=4;i<=n;i++)
    14         if(i<t&&t-i<=m) 
    15                ans+=c(n,i)*c(m,t-i);
    16                
    17     cout<<ans<<endl;
    18     
    19     return 0;
    20 }

     

     

  • 相关阅读:
    opengl中的阴影映射
    怎样实现全屏显示(vc)
    刚花了10800大元买了一台IBM ThinkPad T60 dh2(港行水货)
    64位进程调用32位dll的解决方法
    转贴: OpenGL开发库的组成
    64位程序编译:终于将City****由32位编译为64位了
    opengl中的阴影体
    [转贴+更新]关于Directshow SDK 和Windows SDK
    安全专家称不再向厂商免费提供漏洞信息 狼人:
    国图新馆暴发网络病毒 来源或为读者自带笔记本 狼人:
  • 原文地址:https://www.cnblogs.com/lvguapi/p/12639453.html
Copyright © 2020-2023  润新知