fork download
  1. #include<stdio.h>
  2. #include<unordered_map>
  3. #include<vector>
  4. using namespace std;
  5. int offset[109];
  6. int increaseRange[109];
  7. inline int nmtoid(int n, int m){
  8. if(n*m<=6){
  9. if(n==1)return m-2;
  10. if(n==2)return m+4;
  11. if(n==3)return m+7;
  12. return m+9+n-4;
  13. }
  14. else{
  15. if(n==1)return m+6;
  16. if(n==2)return 16;
  17. if(n==3)return 17;
  18. if(n==4)return 18;
  19. return n+12;
  20. }
  21. }
  22. inline int encode(int nmid, int di, int dj){
  23. return (nmid * 9 + di) * 9 + dj;
  24. }
  25. inline void decode(int id, int& nmid, int& di, int& dj)
  26. {
  27. dj = id%9; id/=9;
  28. di = id%9; id/=9;
  29. nmid = id;
  30. }
  31. struct QType{
  32. int id;
  33. int of;
  34. };
  35. int n, m;
  36. vector<QType> qlist[500][500];
  37. void inil(){
  38. int i, j, k, l;
  39. offset[1] = 1;
  40. increaseRange[1] = 1;
  41. for(i=2;i<=9;i++){
  42. offset[i] = offset[i-1] * 6;
  43. increaseRange[i] = increaseRange[i-1] * 6 + 1;
  44. }
  45. for(i=0;i<n;i++){
  46. for(j=0;j<m;j++){
  47. for(k=1;k<=9;k++){
  48. if(i+k<=n){
  49. for(l=1;l<=9/k;l++){
  50. if(k*l >= 2 && j+l<=m){
  51. for(int di = 0; di < k; di++){
  52. for(int dj = 0; dj < l; dj++){
  53. QType q;
  54. q.id = encode(nmtoid(k, l), di, dj);
  55. q.of = offset[di * l + dj + 1];
  56. qlist[i+di][j+dj].push_back(q);
  57. }
  58. }
  59. }
  60. }
  61. }
  62. }
  63. }
  64. }
  65. }
  66.  
  67. int main()
  68. {
  69. int i, j, k;
  70. for(i=1;i<=9;i++)
  71. for(j=1;j<=9/i;j++)
  72. printf("%d %d -> %d\n",i,j,nmtoid(i,j));
  73.  
  74. }
Success #stdin #stdout 0.01s 8948KB
stdin
Standard input is empty
stdout
1 1 -> -1
1 2 -> 0
1 3 -> 1
1 4 -> 2
1 5 -> 3
1 6 -> 4
1 7 -> 13
1 8 -> 14
1 9 -> 15
2 1 -> 5
2 2 -> 6
2 3 -> 7
2 4 -> 16
3 1 -> 8
3 2 -> 9
3 3 -> 17
4 1 -> 10
4 2 -> 18
5 1 -> 11
6 1 -> 12
7 1 -> 19
8 1 -> 20
9 1 -> 21