SRM543

SRM543に出た。

easy:やるだけ。

#include<stdio.h>
#include<algorithm>
#include<string>
#include<iostream>
using namespace std;
int main()
{
	string str;
	cin>>str;
	int cit=0,vil=0;
	for(int i=0;i<str.size();i++)
	{
		if(str[i]=='C')
		{
			cit++;
		}
		else
		{
			vil++;
		}
	}
	if(cit>vil)
	{
		swap(cit,vil);
	}
	int ret;
	if(cit==vil)
	{
		ret=cit*2;
	}
	else
	{
		ret=cit*2+1;
	}
	printf("%d\n",ret);
}

(これは手元で書いたコードなので向こうでは出力とかはちゃんと直してます)

medium:わからないからとりあえず紙に累積xorみたいなのを書いてみる。xor(4n,4n+1,4n+2,4n+3)みたいなのが必ず0になることがわかる。証明も簡単(下2ケタ以外は一緒なのでそこのxorは0、下2ケタは00,01,10,11なので0、よって0)
書いて出して終わり。

#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
int main()
{
	ll a,b;
	scanf("%lld%lld",&a,&b);
	ll ret=0;
	if(b-a<=12)
	{
		for(ll i=a;i<=b;i++)
		{
			ret=ret^i;
		}
	}
	else
	{
		ll au=a/4;
		au*=4;
		au+=3;
		ll lb=b/4;
		lb*=4;
		for(ll i=a;i<=au;i++)
		{
			ret=ret^i;
		}
		for(ll j=lb;j<=b;j++)
		{
			ret=ret^j;
		}
	}
	printf("%lld\n",ret);
}

hard:考える。わからない。歩くのはどこで歩いても同じだからほっといてあとで二分探索すればいいということはわかるが先に進めない。
部屋でも出してる人いなかった。
rngさんに屈折だよと言われ、屈折そのものであることはわかったが物理やってないしわからない。

結果、2完(challenge +1,-1)で34位。
rate:795->1035(+240)
まあ元がこのレートならそれくらい上がるよな・・・ということでこれで満足はしてないです。