zoukankan      html  css  js  c++  java
  • Codeforces Round #585 (Div. 2) A,B,C,D

    题目链接:https://codeforces.com/contest/1215

     ***************************************************************第A题***************************************************************

    思路:过于简单
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<ctime>
     4 #include<cstring>
     5 #include<cstdlib>
     6 #include<cmath>
     7 #include<queue>
     8 #include<stack>
     9 #include<map> 
    10 #include<algorithm>
    11 #define Max(a,b) ((a)>(b)?(a):(b))
    12 #define Min(a,b) ((a)<(b)?(a):(b))
    13 #define Mem0(x) memset(x,0,sizeof(x))
    14 #define Mem1(x) memset(x,-1,sizeof(x))
    15 #define MemX(x) memset(x,0x3f,sizeof(x))
    16 using namespace std;
    17 typedef long long ll;
    18 const int inf=0x3f3f3f;
    19 const double pi=acos(-1.0);
    20 
    21 int main()
    22 {
    23     int a1,a2,k1,k2,n,min1=0,max2=0;
    24     cin>>a1>>a2>>k1>>k2>>n; 
    25     int p=a1*k1+a2*k2-a1-a2;
    26     if (n>p){
    27         min1=n-p;
    28         if (min1>=a1+a2){
    29             min1=a1+a2; 
    30         }
    31     }
    32     if (k1<k2){//   保证第一队罚下一人的需要的黄牌更多 
    33         int t;
    34         t=k1;k1=k2;k2=t;
    35         t=a1;a1=a2;a2=t;
    36     }    
    37     int tmp=n,temp=n/k2;
    38     if (temp>=a2&&tmp>0){//全下 
    39         tmp=tmp-k2*a2;
    40         max2=max2+a2;
    41         if (tmp>=k1){
    42             temp=tmp/k1;
    43             max2=max2+min(temp,a1);
    44         } 
    45     }
    46     else if (temp<a2&&tmp>0){ //部分下 
    47 
    48         max2=max2+temp;
    49     }
    50     cout<<min1<<" "<<max2<<endl;
    51     return 0;
    52 }

     ***************************************************************第B题***************************************************************

     

    思路:
            可以寻找包含头元素的子串序列,分别记录子序列乘积大于0和小于0的数量,数量分别为a和b。
    
             那么所有的能乘积为负数的子序列个数为:a*b。
    证明:
        可以参考前缀和的思想,利用前缀和可以直接遍历到所有的子序列。   至于为什么是a
    *b,解释为:负数的产生一定是由一个正数和负数相乘所得到。 乘积为正数的序列个数为: (n+1)*n/2-a*b 证明: 因为在区间【1,n】内,分别取 l 和 r ,那么总共的取数为 C(n,2)+ n 这里C(n,2)很好理解就是简单的组合,那为什么还要加n呢?
    解释: 在这里 l 和 r 可以取相同的数,即 l
    =r,所以还需要再加上一个 n 将 C(n,2)+ n 化简即得 :(n+1)* n /2 将所有情况减去负数情况 就是正数情况。 即得证: 正数序列个数为: (n+1)*n/2-a*b
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<ctime>
     4 #include<cstring>
     5 #include<cstdlib>
     6 #include<cmath>
     7 #include<queue>
     8 #include<stack>
     9 #include<map> 
    10 #include<algorithm>
    11 #define Max(a,b) ((a)>(b)?(a):(b))
    12 #define Min(a,b) ((a)<(b)?(a):(b))
    13 #define Mem0(x) memset(x,0,sizeof(x))
    14 #define Mem1(x) memset(x,-1,sizeof(x))
    15 #define MemX(x) memset(x,0x3f,sizeof(x))
    16 using namespace std;
    17 typedef long long ll;
    18 const int inf=0x3f3f3f;
    19 const double pi=acos(-1.0);
    20 
    21 int main()
    22 {
    23     ll n,x,a=0,b=1,tmp=1;
    24     scanf("%lld",&n);
    25     for (ll i=1;i<=n;i++){
    26         scanf("%lld",&x);
    27         if (x<0)
    28             tmp*=-1;
    29         if (tmp<0)
    30             a++;
    31         else
    32             b++;
    33     }
    34     printf("%lld %lld
    ",a*b,(n+1)*n/2-a*b);
    35     return 0;
    36 }

    ***************************************************************第C题***************************************************************

    思路:
         记录在相同位置下s串为a且t串为b  和  记录s串为b,t串为a    的数量和地址
    
    
        以s串为a,t串为b情况做例子。
        
            如下图两两进行交换即可,其他类推。   

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<ctime>
     4 #include<cstring>
     5 #include<cstdlib>
     6 #include<cmath>
     7 #include<queue>
     8 #include<stack>
     9 #include<map> 
    10 #include<algorithm>
    11 #define Max(a,b) ((a)>(b)?(a):(b))
    12 #define Min(a,b) ((a)<(b)?(a):(b))
    13 #define Mem0(x) memset(x,0,sizeof(x))
    14 #define Mem1(x) memset(x,-1,sizeof(x))
    15 #define MemX(x) memset(x,0x3f,sizeof(x))
    16 using namespace std;
    17 typedef long long ll;
    18 const int inf=0x3f3f3f;
    19 const double pi=acos(-1.0);
    20 
    21 char s1[200005],s2[200005];
    22 int main(){
    23     int n;
    24     cin>>n;
    25     for(int i=1;i<=n;i++)
    26         cin>>s1[i];
    27     getchar();
    28     for(int i=1;i<=n;i++)
    29         cin>>s2[i];
    30     int num_ab=0,num_ba=0;
    31     int ab[200005]={0},ba[200005]={0};
    32     for(int i=1;i<=n;i++){
    33         if(s1[i]=='a'&&s2[i]=='b'){
    34             num_ab++;
    35             ab[num_ab]=i;
    36         }
    37         else if(s1[i]=='b'&&s2[i]=='a'){
    38             num_ba++;
    39             ba[num_ba]=i;
    40         }
    41     }
    42     if((num_ab+num_ba)&1) cout<<"-1"<<endl;
    43     else{
    44         if(num_ab&1){
    45             cout<<num_ab/2+num_ba/2+2<<endl;
    46             for(int i=1;i<num_ab;i+=2)
    47                 cout<<ab[i]<<" "<<ab[i+1]<<endl;
    48             for(int i=1;i<num_ba;i+=2)
    49                 cout<<ba[i]<<" "<<ba[i+1]<<endl;
    50             cout<<ab[num_ab]<<" "<<ab[num_ab]<<endl<<ab[num_ab]<<" "<<ba[num_ba]<<endl;
    51         }
    52         else{
    53             cout<<(num_ab+num_ba)/2<<endl;
    54             for(int i=1;i<=num_ab;i+=2)
    55                 cout<<ab[i]<<" "<<ab[i+1]<<endl;
    56             for(int i=1;i<=num_ba;i+=2)
    57                 cout<<ba[i]<<" "<<ba[i+1]<<endl;
    58         }
    59     }
    60     return 0;
    61 }

     ***************************************************************第D题***************************************************************

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<ctime>
     4 #include<cstring>
     5 #include<cstdlib>
     6 #include<cmath>
     7 #include<queue>
     8 #include<stack>
     9 #include<map> 
    10 #include<algorithm>
    11 #define Max(a,b) ((a)>(b)?(a):(b))
    12 #define Min(a,b) ((a)<(b)?(a):(b))
    13 #define Mem0(x) memset(x,0,sizeof(x))
    14 #define Mem1(x) memset(x,-1,sizeof(x))
    15 #define MemX(x) memset(x,0x3f,sizeof(x))
    16 using namespace std;
    17 typedef long long ll;
    18 const int inf=0x3f3f3f;
    19 const double pi=acos(-1.0);
    20 
    21 const int MAXN=2e5+10;
    22 int n;
    23 char str[MAXN];
    24 int main()
    25 {
    26     cin>>n>>str+1;
    27     int tmp=n/2,a=0,b=0;
    28     for (int i=1;i<=tmp;i++){
    29         if (str[i]=='?')
    30             a+=9;
    31         else
    32             a=a+2*(str[i]-'0');
    33     }
    34     for (int i=tmp+1;i<=n;i++){
    35         if (str[i]=='?')
    36             a-=9;
    37         else
    38             a=a-2*(str[i]-'0');
    39     }
    40     if (a)
    41         printf("Monocarp
    ");
    42     else
    43         printf("Bicarp
    ");
    44     return 0;
    45 }

     

  • 相关阅读:
    为了你,我一定要写诗
    哈佛成功金句25则(看一遍,都会很有收获!)
    成功者的十三个“百万元习惯”
    商业领袖的7大人脉宝典
    我为你疯狂
    秋收,为何我收获的只有泪水
    又逢中秋月
    今宵谁与共
    26句话,让你豁然开朗
    田彩蝶(帮别人名字作诗)
  • 原文地址:https://www.cnblogs.com/q1204675546/p/11567879.html
Copyright © 2011-2022 走看看