[TIOJ] 1120. 分子運動問題

題目連結:http://tioj.infor.org/problems/1120
基本上就是模擬他做的事,不過走過的點記得存下來,然後會有同樣結果的也先記下來,因為它是以6cm/s繞40cm的正方形,所以很容易可知每20秒會循環一次,大概這樣囉
#include <bits/stdc++.h>
using namespace std;
#define N 20000

struct TsuoBiaw{
	int x,y;
};

TsuoBiaw arr[N+5];
bitset<N+5> isset;

int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		if(isset[n]){
			printf("(%d,%d)\n",arr[n].x,arr[n].y);
			continue;
		}
		TsuoBiaw p;
		p.x=10;
		p.y=5;
		bool flag=true;
		char fanXian=0;
		p.x+=6*n;
		while(flag){
			switch(fanXian){
				case 0:
					if(p.x>15){
						p.y += p.x-15;
						p.x=15;
					}else{
						flag=false;
					}
					break;
				case 1:
					if(p.y>15){
						p.x -= p.y-15;
						p.y=15;
					}else{
						flag=false;
					}
					break;
				case 2:
					if(p.x<5){
						p.y -= 5-p.x;
						p.x=5;
					}else{
						flag=false;
					}
					break;
				case 3:
					if(p.y<5){
						p.x += 5-p.y;
						p.y=5;
					}else{
						flag=false;
					}
					break;
			}
			fanXian++;
			fanXian%=4;
		}
		printf("(%d,%d)\n",p.x,p.y);
		while(n<=N){
			isset[n]=1;
			arr[n]=p;
			n+=20;
		}
	}
	return 0;
}

留言

這個網誌中的熱門文章

[TIOJ] 1271. [IOI 2012] Scrivener 斯克里夫尼

[TIOJ] 1429. [APIO '12] 忍者調度問題

[Codeforces] 731D. 80-th Level Archeology