Particle

競技プログラミングについての雑記

April Fools Day Contest

普通に面白かったです。
http://codeforces.com/contest/171

A
サンプルから推測。

#include<iostream>
#include<string>
using namespace std;

int a;
string b;

int main(){
	cin>>a>>b;
	for(int i = 0,t = 1,l = b.size(); i < l; i++){
		a += (b[i]-48)*t;
		t *= 10;
	}
	cout<<a<<endl;
}

B
問題文は絵で与えられます。

#include <iostream>
using namespace std;

long long a;//たぶんオーバーフローしない

int main(){
	cin>>a;
	cout<<a*(a-1)*6+1<<endl;
	return 0;
}

C
問題文が問題文に見えると解けない。ソースコードに見えても多分解けない。

D

#include <iostream>
using namespace std;
int t,a[5] = {};//ここに適当に数字入れる
int main(){
	cin>>t;
	cout<<a[t-1]<<endl;
}

E
言語は特定できたけど、難しすぎる。
引き算したり、mod256したり、反転したりする言語。

F
シーザー暗号だった。単一換字式暗号だと、予想して頻度分析(+単語レベルで見つける)したけど少しだけ時間の無駄だった。プログラミングできるのに手動で解きました...
他の問題の難易度から考えて、ヴィジュネル暗号とかホモフォニック暗号の可能性もあったけど、少しやればtheとかoutputとかprimeが見つかるから、その可能性はすぐに捨てられる。
デバッグオンライン数列大辞典使いました。(使わなかったら2WA以上してたと思う)

#include <iostream>
#include <vector>
using namespace std;
bool prime[10000000];
bool t[10000000];
vector<int> emirps;


bool f(int a){//バグがあるけど、素数しか入れないなら問題ない
	int c = a;
	int k = 1;
	int b = 0;
	while(k<a)k*=10;
	k /= 10;
	while(k){
		b += (a%10)*k;
		a /= 10;
		k /= 10;
	}
	if(!(b%2) || prime[b] || b == c)return false;
	else {
		t[b] = true;
		return true;
	}
}

int main(){
	for(int i = 3; i < 10000000; i+=2){
		if(!prime[i]){
			for(int j = i*3; j < 10000000; j += i*2)prime[j] = true;
		}
	}
	
	for(int i = 13; i < 10000000; i+=2){
		if(!prime[i] && (t[i] || f(i)))emirps.push_back(i);
	}
	
	int n;
	cin>>n;
	cout<<emirps[n-1]<<endl;
	return 0;
}

G
a3が大きくなると、急に大きくなる。
2 + 3 = 5
14 = 14
17 + 2*18 = 53
まで分かっていたから、解きたかった。

H
実装できそうに無かった。



166位でした。ペナルティが少なかったみたいです。