A - A.M. Deviation
总结:这道题一开始很带有迷惑性,后面发现都是给定三个数字,只需要把一边置零,看另一边是否为三的倍数即可。
#include<cstdio>
#include<iostream>
#include<queue>
#include<stack>
#include<cmath>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int a,b,c;
cin>>a>>b>>c;
int sum1 = a + c;
int sum2 = 2*b;
if(sum1 ==sum2)
cout<<"0\n";
else if(sum1 >sum2)
{
sum1 -=sum2;
if(sum1 %3 == 0)
cout<<"0\n";
else
cout<<"1\n";
}
else
{
sum2 -=sum1;
if(sum2 %3== 0)
cout<<"0\n";
else
cout<<"1\n";
}
}
return 0;
}
B - Reverse Sort
总结:这道题一开始看题没看懂,以为是什么厉害的操作,后面交换了一下思路的时候,发现这道题就是问拿几个数出来reverse来可以让整个数组变成升序。这就简单了,先计算1的个数,再从后数有多少个1不在它原本该在的位置,记录下来,然后再从前往后数,看有0不在的位置,就可以了。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstring>
#include<string>
#include<queue>
#include<vector>
#include<stack>
#include<algorithm>
typedef long long ll;
using namespace std;
char a[10000000];
int vis[100000];
int main()
{
int t;
cin>>t;
while(t--)
{
int cnt = 0;
int len;
cin>>len;
int cou = 0;
for(int i = 1;i<=len;i++)
{
cin>>a[i];
if(a[i] == '1')
cnt++;
}
for(int i = 0;i<cnt;i++)
{
if(a[len-i] == '0')
{
cou++;
}
}
if(cou == 0)
{
cout<<"0\n";
}
else
{
cout<<"1\n";
cout<<cou*2<<endl;
int flag = 0;
for(int i = 1;i<=len;i++)
{
if(a[i] == '1')
{
flag++;
cout<<i<<" ";
}
if(flag == cou)
break;
}
flag = 0;
stack<int>s;
for(int i = len;i>=1;i--)
{
if(a[i]=='0')
{
flag++;
s.push(i);
}
if(flag == cou)
break;
}
while(!s.empty())
{
cout<<s.top()<<" ";
s.pop();
}
cout<<endl;
}
}
return 0;
}
C - Dominant Charac
总结:这道题只能说是没想到所有的状况,直接暴力就好了,反正也就几种状况,还有就是不用考虑太多,因为短的肯定会覆盖长的。
#include<cstdio>
#include<iostream>
#include<queue>
#include<stack>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
char a[1000000];
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
string s;
cin>>n>>s;
int flag = 0;
for(int i = 1; i<n;i++)
{
if(s[i] == s[i - 1] && s[i] == 'a')
{
cout<<"2\n";
flag = 1;
break;
}
}
if(flag) continue;
for(int i = 2; i < n; i++)
{
if(s[i] == s[i - 2 ] && s[i] == 'a')
{
cout<<"3\n";
flag = 1;
break;
}
}
if(flag) continue;
for(int i = 3; i< n; i++)
{
if(s[i] == s[i - 3] && s[i] == 'a' && s[i-1] != s[i-2])
{
cout<<"4\n";
flag = 1;
break;
}
}
if(flag) continue;
for(int i = 6; i < n; i++)
{
if(s[i] == 'a' && s[i - 6] == 'a' && s[i-3] =='a' && s[i-6] == 'a'&& s[i-4] != s[i-2])
{
cout<<"7\n";
flag =1;
break;
}
}
if(flag) continue;
printf("-1\n");
}
return 0;
}
总结 :
可以说本次的题卡在了第三题,第二题也出现了点问题,导致后面只写了两道题,还是要多锻炼思维能力。