题目列表
Codeforces Round #754 (Div. 2)
1,A. A.M. Deviation-Codeforces Round #754 (Div. 2)
题意:a,b,c三个数。每次只能选两个数,一个数字加一,一个数字减一。可以进行任意次数的操作。
操作完的三个数是a1,b1,c1求其中两个数的和减去第三个数的两倍的绝对值的最小值。
题解:三种情况abs(a+b-2c)%3,abs(c+b-2a)%3,abs(a+c-2*b)%3,求最小值。
解释:因为如果两个任取两个数,减第三个数的两倍会发现,如果每次操作的是两个相加的数,结果不变,如果取得是一个减数一个被减数,那结果可能加三或者减三。所以最后的结果只能是最初的结果%3,才是尽可能小的。
代码:
/*wrcccccccc
*/
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
int t;
cin >> t;
int i1,i3,i2,i4;
while(t)
{t--;
cin >> i1>>i2>>i3;
int max1=100;
i4=9999999;
i4=abs(i1+i2-2*i3);
max1=min(max1,i4%3);
i4=abs(i3+i2-2*i1);
max1=min(max1,i4%3);
i4=abs(i1+i3-2*i2);
max1=min(max1,i4%3);
cout <<max1 << endl;
}
return 0;
}
2,B. Reverse Sort-Codeforces Round #754 (Div. 2)
题意:有一个长度n的二进制字符串。每次可以交换两个位置p,q,但p>q。每次操作都将pq放入容器中,直到将字符串所形成的数最小。将容器排序。按照回文的顺序将原字符串进行交换,如果结果不一样就需要把容器中的元素放到另一个容器中,进行该操作。
题解:l=1,r=n。从左边找到1停止,从右边找到0停止。会发现都是偶数出现,结果是双数。
代码:
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
string x,y;
int a[1010];
int n,m;
int main()
{
int i1,i2,i3,i4,i5,l,r,num;
int t;
cin >> t;
while(t--)
{y='m';num=0;
memset(a,0,sizeof(a));
cin >> n;
cin >> x;
x=y+x;
l=1;r=n;
while(l<=r)
{
while(x[l]=='0'&&l<=r) l++;
while(x[r]=='1'&&r>=l) r--;
if(l>=r) break;
{
a[l]=1;a[r]=1;l++;r--;
num+=2;
}
}
if(num!=0)cout <<1 << endl;
cout <<num<<' ';
for(i1=1;i1<=n;i1++)
{
if(a[i1]==1) {cout<<i1<<' ';}
}
cout<< endl;
}
return 0;
}
3,C. Dominant Character-Codeforces Round #754 (Div. 2)
题意:给出一个字符串s,子字符串为z,如果z中a的数量大于b的数量并且也大于c的数量。那这个字符串是符合条件的。找出符合条件的最短字符串。
题解:其中情况,aa,aba,aca,abca,acba,abbaccq,accabba,按照顺序查找,找到则输出。否则-1。
解释:看的别人的代码。枚举法,因为其余情况都是子集或者是不满足情况。
代码:
#include <iostream>
#include <string>
using namespace std;
string s;
string a="aa";
string b="aba";
string c="aca";
string d="abca";
string e="acba";
string f="abbacca";
string g="accabba";
int n,m;
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n>>s;
m=s.find(a);if(m!=-1) {cout<<2<<endl;continue;}
m=s.find(b);if(m!=-1) {cout<<3<<endl;continue;}
m=s.find(c);if(m!=-1) {cout<<3<<endl;continue;}
m=s.find(d);if(m!=-1) {cout<<4<<endl;continue;}
m=s.find(e);if(m!=-1) {cout<<4<<endl;continue;}
m=s.find(f);if(m!=-1) {cout<<7<<endl;continue;}
m=s.find(g);if(m!=-1) {cout<<7<<endl;continue;}
cout<<-1<<endl;
}
return 0;
}