[TIOJ] 1120. 分子運動問題
題目連結:http://tioj.infor.org/problems/1120
基本上就是模擬他做的事,不過走過的點記得存下來,然後會有同樣結果的也先記下來,因為它是以6cm/s繞40cm的正方形,所以很容易可知每20秒會循環一次,大概這樣囉
基本上就是模擬他做的事,不過走過的點記得存下來,然後會有同樣結果的也先記下來,因為它是以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;
}
留言
張貼留言