夢追い人

"It takes a dreamer to make a dream come true."―Vincent Willem van Gogh

PCKまであと2日

今日はひたすらAOJでPCKの過去問を解きまくって

13時にはみんなが競争してたからJROに参加してちゃっかり一位を取ってきた。。。


解きまくったって言っても5問だけど。
ってか入力ムズい問題はダメだと思う。

0066

一回凡ミスしたけどやるだけ。

#include <iostream>
using namespace std;
int main() {
	string str;
	char map[3][3];
	while (cin>>str) {
		for (int i=0; i<3; i++)
			for (int j=0; j<3; j++) map[i][j] = str[i*3+j];
		char res = 'd';
		for (int i=0; i<3; i++)
			if (map[i][0]==map[i][1]&&map[i][1]==map[i][2]&&map[i][0]!='s')
				res = map[i][0];
		for (int i=0; i<3; i++) 
			if (map[0][i]==map[1][i]&&map[1][i]==map[2][i]&&map[0][i]!='s')
				res = map[0][i];
		if ((map[0][0]==map[1][1]&&map[1][1]==map[2][2]&&map[0][0]!='s')||
				(map[0][2]==map[1][1]&&map[1][1]==map[2][0]&&map[0][2]!='s'))
			res = map[1][1];
		cout << res << endl;
	}
}

0064

isdigitをisalnumと間違えてた上、数字で終わるコーナーケース対策をしてなかった・・・
それを除いたら簡単

#include <sstream>
#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int add(string s) {
	int num = 0;
	string tmp = "";
	for (int i=0; i<s.length(); i++) {
		if (isdigit(s[i])) {
			tmp += s[i];
		} else if (!tmp.empty()) {
			stringstream ss;
			ss.str(tmp);
			int t; ss >> t;
			num += t;
			tmp = "";
		}
	}
	if (!tmp.empty()) {
		stringstream ss;
		ss.str(tmp);
		int t; ss >> t;
		num += t;
	}
	return num;
}

int main() {
	string s;
	int num=0;
	while (cin>>s) {
		num += add(s);
	}
	cout << num << endl;
}

0063

stlゲー

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
	string str;
	int cnt = 0;
	while (cin>>str) {
		string rev = str;
		reverse(rev.begin(), rev.end());
		if (str == rev) cnt++;
	}
	cout << cnt << endl;
}

0062

入力を最初scanf("%s")でやってたらなぜかTLE。。。
こわいね。

#include <iostream>
using namespace std;
int main() {
	int top[10];
	char temp;
	while (cin>>temp) {
		top[0] = temp - '0';
		for (int i=1; i<10; i++) {
			cin>>temp;
			top[i] = temp - '0';
		}
		for (int i=10; i>0; i--) {
			for (int j=0; j+1<i; j++) {
				top[j] = (top[j] + top[j+1]) % 10;
			}
		}
		cout<<top[0]<<endl;
	}
}

PKUまじってた 1565

多分記念すべき64問目とやら
やるだけ。

#include <iostream>
#include <cmath>
using namespace std;
int main() {
	string n;
	while (cin>>n && n!="0") {
		int x = n.length();
		long long res = 0;
		for (int i = 0; i < x; i++) {
			res += (n[i] - '0') * (pow(2, x - i) - 1);
		}
		cout << res << endl;
	}
}

感想

なんで毎回感想つけるのか自分でもあまりわかってないけど…

とりあえずcinとcoutはさけたほうがいいといわれ避けてきたのにここにきていきなりscanfと%sの組み合わせでTLEが起こるという非常事態が起こり、
まぁcinも時には使うべきなんだなとあらためて実感しました○