2018 청도 ICPC&&ZOJ 4063:토너먼트(구조)

1723 단어 구조

제목 링크:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4063
 
제목:
n 과 k 를 드 리 겠 습 니 다.모두 1000 보다 적 고 k*n 의 배열 을 구성 하여 만족 합 니 다.
  • a[p][x]=y 라면 a[p][y]는 x,1≤p≤k,1≤x,y≤n
  • 과 같 아야 한다.
  • 열 마다 모든 숫자 가 다 르 고 줄 마다 모든 숫자 가 다 르 며[1,n]범위 내
  • 임의의 두 줄 i 에 대해 하면,만약,만약... = y, a[i][y] = x,  a[i][c] = d,a[i][d] = c,그리고 a[j][x] = c,a[j][c] = x,그러면 a[j][y]를 만족 시 켜 야 합 니 다. = d,그리고 a[j][d] = y
  • 사전 순서 가 가장 작다
  • 출력 불 능
     
    생각:
    구조 문 제 는 이론 적 으로 데이터 로 AC 코드 를 측정 하면 출력 을 볼 수 있 습 니 다.어떻게 구성 하 느 냐 가 중요 하기 때 문 입 니 다.
    이 문 제 는 1024*1024 의 상황 을 미리 처리 한 다음 에 매번 n,k 를 물 을 때마다 n 행 전 k 열 을 직접 출력 할 수 있다 면 됩 니 다.
     
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    using namespace std;
    #define LL long long
    #define mod 1000000007
    int len, ans[1038][1038];
    void Gao(int x, int y, int n, int p)
    {
    	int i, j;
    	if(n==1)
    	{
    		ans[x][y] = p;
    		return;
    	}
    	n /= 2;
    	Gao(x, y, n, p);
    	Gao(x, y+n, n, p+n);
    	for(i=1;i<=n;i++)
    	{
    		for(j=1;j<=n;j++)
    		{
    			ans[x-1+i+n][y-1+j] = ans[x-1+i][y-1+j+n];
    			ans[x-1+i+n][y-1+j+n] = ans[x-1+i][y-1+j];
    		}
    	}
    }
    int main(void)
    {
    	int T, n, k, i, j;
    	Gao(1, 1, 1024, 1);
    	scanf("%d", &T);
    	while(T--)
    	{
    		scanf("%d%d", &n, &k);
    		if(k>=(n&-n))
    			printf("Impossible
    "); else { len = n; for(i=2;i<=k+1;i++) { printf("%d", ans[i][1]); for(j=2;j<=n;j++) printf(" %d", ans[i][j]); puts(""); } } } return 0; }

    좋은 웹페이지 즐겨찾기