U E D R , A S I H C RSS

1R/2016_07_07 (rev. 1.3)

1R/2016_07_07


1. 오늘의 문제

2. 참가자

  • 박인서
  • 15이원준

3. 코드

3.1. 박인서

#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;
}

4. 아이디어

4.1. 박인서

  • 숫자를 일일이 채워 넣을 수 없다.
  • 홀짝 마다 규칙성을 나눠서 좌표를 넣으면 그 위치에 해당하는 번호를 가르킬 수 있게 만듬.
  • 숫자를 셀 때 대각선에 있는 수의 갯수가 늘어났다가 다시 줄어듦을 잘 확인하여야 됨.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:06
Processing time 0.0245 sec