cf-800链接:https://codeforces.com/contest/1694
题a
正常循环输入01,多的最后输入就行
你要的代码在这里
using namespace std;
typedef long long ll;
int main(){
int u;
cin>>u;
while (u--){
int a,b;
cin>>a>>b;
int o=abs(a-b);
if(a>b){
while (b--){
cout<<"01";
}
while (o--){
cout<<'0';
}
} else{
while (a--){
cout<<"01";
}
while (o--){
cout<<'1';
}
}
cout<<endl;
}
return 0;
}
题b
由于两者不相同可以消除前一个,则当字符串中a-b相邻的字符不同时,以前面任意一个位置到b的位置都可以完成消除
你要的代码在这里
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int u;
cin>>u;
while (u--){
int le;
cin>>le;
long long sum=0;
string arr;
cin>>arr;
arr=' '+arr;
for(int i=1;i<=le;i++){
if(arr[i]!=arr[i-1])
sum+=i;
else
sum++;
}
cout<<sum<<endl;
}
return 0;
}
题c
用前缀和看最后一项是否为0,且中间不能为负数和0
你要的代码在这里
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define NO cout<<"NO"<<endl;
#define YES cout<<"YES"<<endl;
int main(){
int u;
cin>>u;
while (u--){
int n;
cin>>n;
vector<ll> a(n+10);
vector<ll> b(n+10);
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
b[i]=b[i-1]+a[i];
int flag=0;
if(b[n]!=0)
{flag=1;}
for(int i=1;i<=n;i++)
{if(b[i]<0)
flag=1;
}
int zero=0;
for(int i=1;i<=n;i++)
{
if(b[i]==0)
{zero=1;}
else if(zero)
{flag=1;}
}
if(flag)
{NO;}
else
{YES;}
}
return 0;
}