More actions
({CREATE}) |
No edit summary |
||
| Line 4: | Line 4: | ||
= 참가자 = | = 참가자 = | ||
* 박인서 | |||
= 코드 = | = 코드 = | ||
== 박인서 == | |||
#include <iostream> | |||
int main() { | |||
int TC; | |||
std::cin>>TC; | |||
for(int j = 1; j <= TC; j++) { | |||
int n,k,x=0,y=0; | |||
long long int res=1; | |||
int a[300001]; | |||
std::cin>>n>>k; | |||
a[0]=0; | |||
for(int i=1;i<=n;i++) a[i]=a[i-1]+i; | |||
for(int i=1;i<n;i++) a[n+i]=a[n+i-1]+n-i; | |||
for(int i=0;i<k;i++){ | |||
char c; | |||
std::cin>>c; | |||
switch(c){ | |||
case 'U': | |||
x--; | |||
break; | |||
case 'D': | |||
x++; | |||
break; | |||
case 'L': | |||
y--; | |||
break; | |||
case 'R': | |||
y++; | |||
break; | |||
} | |||
res+=a[x+y]; | |||
if(x+y>=n) res-=(x+y-n+1); | |||
switch((x+y)%2){ | |||
case 0: | |||
res+=(y+1); | |||
break; | |||
case 1: | |||
res+=(x+1); | |||
break; | |||
} | |||
} | |||
std::cout<<"Case #"<<j<<std::endl<<res<<std::endl; | |||
} | |||
return 0; | |||
} | |||
= 아이디어 = | = 아이디어 = | ||
== 박인서 == | |||
* 숫자를 일일이 채워 넣을 수 없다. | |||
* 홀짝 마다 규칙성을 나눠서 좌표를 넣으면 그 위치에 해당하는 번호를 가르킬 수 있게 만듬. | |||
* 숫자를 셀 때 대각선에 있는 수의 갯수가 늘어났다가 다시 줄어듦을 잘 확인하여야 됨. | |||
Revision as of 15:06, 7 July 2016
오늘의 문제
참가자
- 박인서
코드
박인서
#include <iostream>
int main() {
int TC;
std::cin>>TC;
for(int j = 1; j <= TC; j++) {
int n,k,x=0,y=0;
long long int res=1;
int a[300001];
std::cin>>n>>k;
a[0]=0;
for(int i=1;i<=n;i++) a[i]=a[i-1]+i;
for(int i=1;i<n;i++) a[n+i]=a[n+i-1]+n-i;
for(int i=0;i<k;i++){
char c;
std::cin>>c;
switch(c){
case 'U':
x--;
break;
case 'D':
x++;
break;
case 'L':
y--;
break;
case 'R':
y++;
break;
}
res+=a[x+y];
if(x+y>=n) res-=(x+y-n+1);
switch((x+y)%2){
case 0:
res+=(y+1);
break;
case 1:
res+=(x+1);
break;
}
}
std::cout<<"Case #"<<j<<std::endl<<res<<std::endl;
}
return 0;
}
아이디어
박인서
- 숫자를 일일이 채워 넣을 수 없다.
- 홀짝 마다 규칙성을 나눠서 좌표를 넣으면 그 위치에 해당하는 번호를 가르킬 수 있게 만듬.
- 숫자를 셀 때 대각선에 있는 수의 갯수가 늘어났다가 다시 줄어듦을 잘 확인하여야 됨.