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\n",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\n");
42     else
43         printf("Bicarp\n");
44     return 0;
45 }

 

 

 

 

 

 

posted @ 2019-09-22 16:11  生活待我如初恋  阅读(180)  评论(0编辑  收藏  举报