JOI2016予選

2017/12/05

予選落ちました。今年から本選会場が東京から筑波に変わるらしくて行きたかったけど残念です(チーン)。おひさしぶりです。JOI予選に参加して死んできました。結果はたぶん4完です。問5,6は頭で解けましたが実装力不足で面倒くさくなってやめました。ジュケンベンキョウのせいでピログら民具能力がかなり落ちていてあせりました。老後の楽しみのためにも定期的に付ログら民具していこうと思いました。このパソコンでぷろぐらみんぐと打ってもうまく変換されないことに今気づきました。ボーダーは引退勢なのでよくわからんが400overもワンチャンあるようなないような気がします。そもそも問四の解法あってるのかわからん。一応SIerを目指しているのですが正直ワカンネエッナって感じなので精進するため10年ぐらいサイバー上に現れないかもしれませんが生きています。ところでツイッターのふぁぼがハートになっているのにさっき気がつきました。ではっ

問3,4のソースだけはっときます(1,2のソースがどっかいった)
C++、わりとわすれててあせった
・といさん

int ko[100][5];
int n,m;
char co[100][100];

int main(){
	int ans = 100000000;
	cin >> n >> m;
	
	for(int i = 0;i < n;i++){
		cin >> co[i];
	}
	for(int i = 0;i < n;i++){
		for(int j = 0;j < m;j++){
			if(co[i][j] == W){
				ko[i][0] += 1;
			}else if(co[i][j] == B){
				ko[i][1] += 1;
			}else{
				ko[i][2]++;
			}
		}
	}
	
	for(int i = n-2;i >= 0;i--){
		for(int j = 0;j < 3;j++){
			ko[i][j] += ko[i+1][j];
		}
	}
	
	for(int i = 0;i < n-2;i++){
		for(int j = i + 1;j < n-1;j++){
			for(int k = j + 1;k < n;k++){
				int tmp = 0;
				tmp += ko[k][0] + ko[k][1];
				tmp += (ko[j][0] - ko[k][0]) + (ko[j][2] - ko[k][2]);
				tmp += (ko[0][1] - ko[j][1]) + (ko[0][2] - ko[j][2]);
				ans = min(ans,tmp);
			}
		}
	}
	
	cout << ans << endl;
	return 0;
}	

・問四
なかなか闇だった。あってるのか怪しい。

long long int n,t,q,a[100010],d[100020],x[1020],ch[100030];

int main(){
	
	cin >> n >> t >> q;
	for(int i = 1;i <= n;i++){
		cin >> a[i] >> d[i];
	}
	for(int i = 1;i <= q;i++){
		cin >> x[i];
	}
	
	for(int i = 1;i < n;i++){
		if(d[i]  == 1 && d[i+1] == 2 && (a[i] + a[i+1])/2-a[i] <= t){
			ch[i] = (a[i] + a[i+1])/2;
		}else{
			ch[i] = -1;
		}
	}
	ch[0] = -1;
	ch[n] = -1;
	long long int ans;
	for(int i = 1;i <= q;i++){
		ans = a[x[i]] + (d[x[i]] == 1 ? t : -t);
		if(d[x[i]] == 1){
			if(ch[x[i]] != -1){
				ans = ch[x[i]];
			}else{
				for(int j = x[i]+1;j <= n;j++){
					if(ch[j] != -1 && ch[j] - a[x[i]] <= t){
						ans = min(ans,ch[j]);
					}
				}
			}
		}else{
			if(ch[x[i]-1] != -1){
				ans = ch[x[i]-1];
			}else{
				for(int j = x[i]-1;j > 0;j--){
					if(ch[j] != -1 && a[x[i]] - ch[j] <= t){
						ans = max(ans,ch[j]);
					}
				}
			}
		}
		cout << ans << endl;
	}
	return 0;
}