CODE THANKS FESTIVAL 2017に参加したんですよ。

 

7:30に起床AC。8:00ちょいに出発~。

あれ、交通費とかどうするんだろう、何?領収書??

んじゃあ切符じゃなきゃあかんな。->WA(在来線は領収書必要ない)

帰りの分も買っとくか~。->WA(帰りの切符を新橋やテレコムセンターでなく最寄り駅で買ったため帰りに苦労する羽目になる、帰りに無駄にみどりの窓口とか行った。)

 

 

テレコムセンターに着く

会場どこやろ?人の流れできてるしそれに任せりゃいいかな~?->WA(そもそも参加者100しかいないのに一本の電車で流れができるほど人来ない)

 

 

ということで会場入りまではWAまみれ、太陽でした。

ちゃんと調べましょう。

 

 

コンテスト前

 

1800点以上でパーカーだそうです。

500まで全部解かないといけない、微妙ですね。

開始3分前になってトイレに行きたくなる。

 

 

コンテスト中

A:はい->AC

B:、、、え?なんでみんなそんなカタカタゆーてんの?

いやいや、まってまって、回文足りないところどうすんの(?)

文字列ひっくり返して両端から見る?(?????)

、、、。

、、、。->AC

int main()
{
	string str;
	cin >> str;
	int ans = 1000;
	
	REP(a,str.size())
	{
		int i = a;
		int j = str.size()-1;
		while(j-i >= 1)
		{
			if(str[i] == str[j])
			{
				i++;j--;
			}
			else
			{
				break;
			}
		}
		if(j - i < 1)
		{
			ans = min(ans,a);
		}
		//cout << i << ' ' << j << endl;
		
	}
	
	cout << ans << endl;
			
	
	return 0;
}

何ともね。うん


C:ああ、priority_queueね、はい->AC

ll ans;
int n,k;

int main()
{
	cin >> n >> k;
	priority_queue<PP,vector<PP>,greater<PP> > pq;
	
	REP(i,n)
	{
		ll a,b;
		cin >> a >> b;
		pq.push(MP(a,b));
	}
	
	REP(i,k)
	{
		PP tmp = pq.top();pq.pop();
		
		ans += tmp.FI;
		tmp.FI += tmp.SE;
		pq.push(tmp);
	}
	
	cout << ans << endl;
	
	
	return 0;
}

D:5と4で、、?->1個ずつ空き変わるね。
6と8とかは??->2個ずつ変わるねえ。
10と15は??->5個ずつね、うん。GCDっぽいね。->AC

ll gcd(ll a,ll b)
{
	if(b == 0)
	{
		return a;
	}
	else
	{
		return gcd(b,a%b);
	}
	
}

int main()
{
	ll n,m;
	cin >> n >> m;
	
	ll ans = m - gcd(max(n,m),min(n,m));
	
	cout << ans << endl;
	
	return 0;
}

書き方ひでえ、まあACしたしいいや。

Eインタラクティブ?400で??とりあえずflush調べよ。
、、、。
えー、1回全部見る、、、。->Eからだなこれ(F先でもよかったけどまあ両方できたので)

なんだろ、nが50で質問できるのが10回か、、、。
本物が奇数で偽物が偶数。
なんか最初ざっくりやって偶奇で分けたいな->複数個一緒に見なあいといけない時点でむつかしいから却下。
1回に5個判別出来りゃいいやろ??
あ、袋1つに10000枚くらいあるやん、枚数上手く分ければ行けそう->10倍で分けるか!(WA)
キリいい数字だとダメか、んじゃ7で->AC

int ans[60];

int w[] = {0,9,11,8,10,12};

int main()
{
	int n;
	cin >> n;
	int tmp = n;
	int now = 0;
	
	for(int q = 0;q < 10;q++)
	{
		cout << '?' << ' ';
		int prev = now;
		for(int i = 0;i < now;i++)
		{
			cout << 0 << ' ';
		}
		int kake = 1;
		for(int i = 0;(i < 5 && now < n);i++)
		{
			cout << kake << ' ';
			kake *= 7;
			now++;
		}
		for(int i = now;i < n;i++)
		{
			cout << 0 << ' ';
		}
		cout << endl;
		
		int ret;
		cin >> ret;
		
		REP(i,6*6*6*6*6)
		{
			int tmp = i;
			int kake = 1;
			int hikaku = 0;
			REP(j,5)
			{
				hikaku += w[tmp%6] * kake;
				//cout << w[tmp%6] << ' ';
				kake *= 7;
				tmp /= 6;
			}
			//cout << endl;
			//cout << hikaku << endl;
			
			if(hikaku == ret)
			{
				//cout << prev << endl;	
				tmp = i;
				REP(j,5)
				{
					if(tmp % 6 <= 2 && tmp % 6 != 0)
					{
						ans[prev + j] = true;
					}
					tmp /= 6;
				}
				break;
			}
		}
	}
	
	cout << '!' << ' ' ;
	REP(i,n)
	{
		cout << ans[i] << ' ';
	}
	cout << endl;
	
	
	return 0;
}

なんだこれ、めっちゃ書くのムズイ、、、。

F:足した和が10^5ね、
nが10^5の時とか全部1だね。
DPの計算量落とせるね。
やー。(配列を100010でとってたためRE)
とー。(配列を200010にしたらAC)

ll ans[2][201010];

#define INF 1000000007

int main()
{
	int n,k;
	
	cin >> n >> k;
	
	vector<ll> v;
	
	
	REP(i,n)
	{
		int tmp;
		cin >> tmp;
		v.PB(tmp);
	}
	
	sort(ALL(v));
	
	ans[0][0] = 1;
	
	int m_max = 0;
	
	REP(i,n)
	{
		for(int j = 0;j <= m_max;j++)
		{
			if(ans[0][j] != 0)
			{
				ans[1][j ^ v[i]] = ans[0][j];
				m_max = max(m_max,(int)(j^v[i]));
			}
			else
			{
				ans[1][j ^ v[i]] = 0;
			}
		}
		REP(j,m_max+2)
		{
			ans[0][j] = (ans[0][j] + ans[1][j]) % INF;
		}
		
		//SHOW1d(ans[0],10);
	}
	
	cout << ans[0][k]%INF << endl;
	
	
	return 0;
}

マジか、パーカーゲットじゃん!!
残り1時間あるしもう一問いけるんじゃね!?!?(いいえ)


G:二部マッチングじゃね!?!?->WA
知ってた。(知らなかった)
どうしよう、なんか法則ないかな、、、?
(こうなった時点で全列挙からどんどん離れていく)
残り30分。H考える?えー?いやG!!!->end!!!
結局トイレ行かなかった。


結果35位。結構うれしい。

ちょくだいさんの解説は面白かったです(小並感)(主に英語読み飛ばすのは共感、英語無理)

その後。

名札にアイコン欲しい。
誰がどれ、、、?(ア)
まあ、ちょこちょこ話できたからよし。
お寿司はおいしかった。
今度はもうちょいいろんな人に話しかけに行こう。

帰宅

この切符使えないじゃん!!!!!(WA)