A - Prefixes
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAX = 1e5+5;
int n,re,a_num,b_num;
string s;
int main()
{
cin>>n;getchar();
for(int i=1;i<=n;++i)
{
char t=getchar();
if(t=='a') a_num++;
if(t=='b') b_num++;
if(i%2==0)
{
if(a_num<b_num) { re++;t='a';}
else if(b_num<a_num) { re++;t='b';}
a_num=0;
b_num=0;
}
s+=t;
}
cout<<re<<endl;
cout<<s<<endl;
return 0;
}
B - Shooting
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
#define MAX 1003
using namespace std;
int n,x,sum;
struct node
{
int num;
int id;
}a[MAX];
int cmp(node a,node b)
{
return a.num>b.num;
}
int main()
{
cin>>n;
for(int i=1;i<=n;++i)
{
scanf("%d",&a[i].num);
a[i].id=i;
}
sort(a+1,a+1+n,cmp);
int mins=0x3f3f3f3f;
sum=1;x=1;
for(int i=2;i<=n;++i)
{
sum+=a[i].num*x+1;x++;
}
printf("%d\n",sum);
for(int i=1;i<=n;++i)
{
printf("%d ",a[i].id);
}
return 0;
}
C - White Sheet
#include<iostream>
using namespace std;
struct node
{
int x1,y1,x2,y2;
}s[3];
string Check_a()
{
if(s[2].x1<=s[0].x1&&s[2].x2>=s[0].x2 &&s[2].y1<=s[0].y1&&s[2].y2>=s[0].y2 ) return "NO";
else if(s[1].x1<=s[0].x1&&s[1].x2>=s[0].x2 &&s[1].y1<=s[0].y1&&s[1].y2>=s[0].y2 ) return "NO";
else if(max(s[1].x1,s[2].x1)<=s[0].x1&&s[0].x2<=min(s[1].x2,s[2].x2))
{
if(s[1].y1<=s[0].y1&&s[2].y2>=s[0].y2&&s[1].y2>=s[2].y1) return "NO";
else if(s[2].y1<=s[0].y1&&s[1].y2>=s[0].y2&&s[2].y2>=s[1].y1) return "NO";
}
else if(max(s[1].y1,s[2].y1)<=s[0].y1&&s[0].y2<=min(s[1].y2,s[2].y2))
{
if(s[1].x1<=s[0].x1&&s[2].x2>=s[0].x2&&s[1].x2>=s[2].x1) return "NO";
else if(s[2].x1<=s[0].x1&&s[1].x2>=s[0].x2&&s[2].x2>=s[1].x1) return "NO";
}
return "YES";
}
int main()
{
for(int i=0;i<3;++i)
{
cin>>s[i].x1>>s[i].y1>>s[i].x2>>s[i].y2;
}
cout<<Check_a();
return 0;
}
D - Swords
#include<iostream>
#include<algorithm>
#include<stdio.h>
const int MAX=2e6+7;
using namespace std;
long long n,large,j,sum,a[MAX],b[MAX],gcd;
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n;
large=0;
for(long long i=0;i<n;++i)
{
cin>>a[i];
sum+=a[i];
}
sort(a,a+n);
large=a[n-1];
for(long long i=0;i<n;++i)
{
if(large==a[i])continue;
b[j++]=large-a[i];
}
gcd=b[0];
for(long long i=0;i<j;++i)
{
gcd=__gcd(gcd,b[i+1]);
}
printf("%lld %lld",(n*large-sum)/gcd,gcd);
return 0;
}
H - Text Reverse
#include<iostream>
#include<stack>
#include<stdio.h>
using namespace std;
char c;
int n;
int main()
{
stack<char> s;
scanf("%d",&n);getchar();
while(n--)
{
while(1)
{
c=getchar();
if(c==' '||c=='\n')
{
while(!s.empty())
{
printf("%c",s.top());
s.pop();
}
cout<<c;
}
else
{
s.push(c);
}
if(c=='\n') break;
}
}
}