2012予選

チーム「シナジーを感じるね…」で @HETARE09 さんと参加してました。


結果は
ooxoo-o---
6WAくらいしましたね(白目
16:00の途中経過で24位くらいにいた気がします。(白目

時系列に並べて書きます。
ソースコードは最後に全部載せておきます。

問1
全部足すだけ。
ぐるぐるぽん。
AC

問2
HETAREさんがといたので問題見てない()
AC

問3
僕がとりかかるも
WA

問4
HETAREさんが解く
全部6174になるとかすごい。
AC

問3
僕がまたやってけど
WA

問6をHETAREさんがコーディングしてた。
その横で問3諦めて問5を解き始める。
どう考えても問3<問5だった。

変わってもらう。

問5
パイプの合計の長さを出す。
ジョイントを大きいのから一個ずつ使って、比べる。
WAした。

HETAREさんに問6をコーディングしてもらおうとする。

問5
デバッグ消してなかったことに気づいてちょっとだけ変わってもらう
WA (◞‸◟)

HETAREさんに問6をコーディングしてもらおうとする。

問5
出力を%lldではなく%dにしていたことに気づく。
AC

HETAREさんとコーディングかわる。

HETAREさんがマヤと戦ってる間、問7考える。

代わってもらう。
問7
問題文読み間違えてて、ゴールしたらOKだと錯覚。
コーディングを代わってもらう。
HETAREさんがマヤと戦ってるのを見ながら
問7考える。
問題文の誤読に気づく。
考える。
わからない。
適当にコードかこうと、HETAREさんに代わってもらう。

問7でWAくらう。
HETAREさんと一緒に問7考える。

HETAREさんにコード書いてもらう。
サンプルあったのでなげる。

WA

(◞‸◟)
あと1時間
(◞‸◟)


問7でぐるぐるまわしたら解けそうだったのでコード書く。
サンプルあう。
なげる。
ACする→二人で歓喜する

問3解けない。

問3解けない。

最後らへんでHETAREさんから言われたことを僕が書こうとして死

残り1分でHETAREさんに任せるというムチャぶり(ごめんなさい。

まぁ間に合わないよね(´・ω・`)

終わる。\(^o^)/

こんな感じだった気がする。

反省とかどう考えても僕が時間取り過ぎてて、HETAREさんに十分な時間を渡せなかった。申し訳ない。
ペアプロの練習をしよう。と思った。

以下コード。
奇数番のコード汚い。
問1

#include <cstdio>
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;

int main(){
	
	int a[10]; 
	int t = 0;
	for(int i = 0; i < 10; i++){
		scanf("%d", &a[i]);
		t+=a[i];
	}
	
	printf("%d\n", t);
	return 0;
}

問2

#include <cstdio>
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;

int main(){
	
	int a, b, c;
	scanf("%d%d%d", &a, &b, &c);
	if(a == 1 && b == 0 && c == 0) printf("Close\n");
	else if(a == 1 && b == 0 && c == 0) printf("Close\n");
	else if(a == 0 && b == 1 && c == 0) printf("Close\n");
	else if(a == 0 && b == 0 && c == 0) printf("Close\n");
	else if(a == 1 && b == 1 && c == 0) printf("Open\n");
	else if(a == 0 && b == 0 && c == 1) printf("Open\n");
	
	
	return 0;
}

問4

#include <cstdio>
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <functional>

using namespace std;

int toint(string s){
	int res = 0;
	int r = 1;
	for(int i = s.length()-1; i >= 0; i--){
		res += (s[i]-'0')*r;
		r *= 10;
	}
	return res;
}
string tostr(int n){
	string res = "";
	int i = 0;
	while(i < 4){
		res += (n%10)+'0';
		n/=10;
		i++;
	}
	reverse(res.begin(), res.end());
	return res;
}

int main(void){
	while(1){
		string n;
		cin >> n;
		if(n == "0000") break;
		bool f = true;
		for(int i = 0; i < n.length(); i++){
			if(n[i] != n[0]) f = false;
		}
		if(f){
			printf("NA\n");
			continue;
		}
		int ans = 0;
		while(n != "6174"){
			string s1 = n, s2 = n;
			sort(s2.begin(), s2.end());
			sort(s1.begin(), s1.end(), greater<int>());
			n = tostr(toint(s1)-toint(s2));
			ans++;
		}
		printf("%d\n", ans);
	}
	
	
	return 0;
}

問5

#include <cstdio>
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <functional>

using namespace std;

vector<int> p;

int main(void){

	int n;
	int temp;
	long long t=0;
	while(scanf("%d", &n), n!=0){
		for(int i = 0; i < n; i++){
			scanf("%d", &temp);
			t+=temp;
		}
	
		for(int i = 0; i < n-1; i++){
			scanf("%d", &temp);
			p.push_back(temp);
		}
	
		sort(p.begin(), p.end());
		reverse(p.begin(),p.end());
		for(int i = 0; i < n ;i++)cout << p[i] << endl;
	
		long long ans = n*t;
		int k = 0;
	
		for(int i = 0; i < n; i++){
			k+=p[i];
			ans = max(ans, (t+k)*(n-i-1));
		}
	
		printf("%d", ans);
		p.clear();
	}

	return 0;
}

問7

#include <cstdio>
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <functional>

using namespace std;

int memo[256][256] = {0};


int main(void){
	int max;
	
	while(scanf("%d", &max), max!=0){
		queue<int> q;
		
		int n;
		int cell[256] = {0};
		int visit[256] = {0};
		
		for(int i = 0; i < 256; i++)for(int j = 0; j < 256; j++)memo[i][j] = 0;
		scanf("%d", &n);
		
		for(int i = 0; i < n; i++){
			scanf("%d", &cell[i+1]);
		}
		
		q.push(0);
		visit[0] = 1;
		
		while(!q.empty()){
			int nowp = q.front(), nextp;

			q.pop();
			for(int i = 1; i <= max; i++){
				nextp = nowp + i+ cell[nowp+i];
				if(nextp>=n+1)nextp = n+1;
				if(nextp<0)nextp = 0;
				
				memo[nextp][nowp] = 1;
				if(visit[nextp])continue;
				q.push(nextp);
				visit[nextp] = 1;
			}
		}
		
		for(int i = 0; i < 256; i++){visit[i] = 0;}
		visit[n+1] = 1;
		/*
		for(int i = 0; i < 10; i++){
			for(int j = 0; j < 10; j++){
				printf("%d ", memo[i][j]);
			}puts("");
		}
		*/
		
		for(int i = 0; i < 256; i++){
			if(memo[n+1][i] == 1){
				q.push(i);
				memo[n+1][i] = 0;
			}
		}
		
		while(!q.empty()){
			int p = q.front();q.pop();
			
			for(int i = 0; i < 256; i++){
				if(memo[p][i] == 1){
					if(visit[i] == 0){
						q.push(i);
						visit[i] = 1;
					}
					memo[p][i] = 0;
				}
			}
		}
		int ans = 0;
		for(int i = 0; i < 256; i++){
			for(int j = 0; j < 256; j++){
				if(memo[i][j] == 1){
					ans = 1;
				}
			}
		}
		
		if(ans){
			puts("NG");
		}else {
			puts("OK");
		}
		
	}
	
	return 0;
}