Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

1R/2016 07 07: Difference between revisions

From ZeroWiki
({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;
}

아이디어

박인서

  • 숫자를 일일이 채워 넣을 수 없다.
  • 홀짝 마다 규칙성을 나눠서 좌표를 넣으면 그 위치에 해당하는 번호를 가르킬 수 있게 만듬.
  • 숫자를 셀 때 대각선에 있는 수의 갯수가 늘어났다가 다시 줄어듦을 잘 확인하여야 됨.