Wednesday, October 6, 2010

ACM: 135 – No Rectangles

要找到規律,畫一個k=6的解,就可以找到規律了。不過雖然找到了規律,卻還不知道為什麼規律是這樣。

CODE

#include <iostream>

int main(){
  int k, n;
  int block; //k-1
  bool flag = false;
  
  while( scanf("%d", &k) != EOF ) {
    if( flag )
      printf("\n");
    else
      flag = true;
      
    n = k * k - k + 1;
    block = k - 1;
    
    int i, j, t, p;
    int line = 0; //count total lines printed
    int starter = 1; //first number of every line
    int count = 2;
    
    //print first k lines
    for(i=0; i<k; ++i, ++line){
      printf("%d", starter);
      for(j=1; j<k; ++j, ++count){
        printf(" %d", count);
      }//j: k marks
      printf("\n");
    }//i: line
    
    //print (k-1) blocks, each block has (k-1) lines
    for(i=0; i<block && line<=n; ++i){
      ++starter;
      for(j=0; j<block; ++j, ++line){
        printf("%d", starter);
        p = j;
        printf(" %d", k+p+1);
        for(t=(k+block+1); t<n; t+=block){
          p = (p + i) % block;
          printf(" %d", t+p);
        }//t: go to starting point of each block
        printf("\n");
      }//j: lines
    }//i: blocks of lines
  }
  
  return 0;
}

No comments:

Post a Comment