fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. // #define vs vector<string >
  6. #define ll long long int
  7. #define pb push_back
  8. #define vi vector<int>
  9. #define vt vector<tup>
  10. #define vtt vector<vt >
  11. #define vii vector<vi >
  12. #define viii vector<vii >
  13. #define vb vector<bool>
  14. #define vd vector<double>
  15. #define vbb vector<vb >
  16. #define vl vector<long long int>
  17. #define vll vector<vl >
  18. #define vlll vector<vll >
  19. #define foi(x) for (int i = 0; i < x; ++i)
  20. #define foj(x) for (int j = 0; j < x; ++j)
  21. #define fok(x) for (int k = 0; k < x; ++k)
  22. #define foi1(x) for (int i = 1; i <= x; ++i)
  23. #define foj1(x) for (int j = 1; j <= x; ++j)
  24. #define si size()
  25. #define le length()
  26. #define vs vector<string>
  27. #define vss vector<vs >
  28. #define qs queue<string>
  29.  
  30.  
  31. class tup{
  32. public:
  33. int a, b;
  34. tup(){}
  35. tup(int p, int q){
  36. a=p;
  37. b=q;
  38. }
  39. };
  40.  
  41. const double eps = 1e-8;
  42.  
  43. bool isPres(vector<double> &v, double d){
  44. for(auto x:v){
  45. if(fabs(d-x)<eps)
  46. return true;
  47. }
  48. return false;
  49. }
  50.  
  51. int ans;
  52.  
  53. void swap(tup &p, tup &q){
  54. tup x(p.a,p.b);
  55. p=q;
  56. q=x;
  57. }
  58.  
  59. void f(vt &v){
  60. int x = 0;
  61. foi(v.si-1){
  62. if(v[i].a>=v[i+1].a and v[i].b>=v[i+1].b)
  63. return;
  64. if((v[i+1].a == v[i].a) or (v[i+1].b == v[i].b))
  65. continue;
  66. if(!x){
  67. x=(v[i+1].a<v[i].a)?1:-1;
  68. continue;
  69. }
  70. if((x==-1 and v[i+1].a<v[i].a) or (x==1 and v[i+1].a>v[i].a))
  71. return;
  72. }
  73. ans++;
  74. }
  75.  
  76. void genPerm(vt &v, int i, int j){
  77. if(i==j){
  78. f(v);
  79. return;
  80. }
  81. for(int k=i;k<=j;k++){
  82. swap(v[i],v[k]);
  83. genPerm(v,i+1,j);
  84. swap(v[i],v[k]);
  85. }
  86. }
  87.  
  88. int main(int argc, char const *argv[])
  89. {
  90. int t;
  91. cin>>t;
  92. for(int q=1;q<=t;q++){
  93. cout<<"Case #"<<q<<": ";
  94. int n,x,y;
  95. cin>>n;
  96. vt v;
  97. foi(n){
  98. cin>>x>>y;
  99. tup t1;
  100. t1.a=x;t1.b=y;
  101. v.pb(t1);
  102. }
  103. ans = 0;
  104. genPerm(v,0,n-1);
  105. cout<<ans<<endl;
  106. }
  107. return 0;
  108. }
Success #stdin #stdout 0s 4556KB
stdin
3
3
1 1
1 2
2 1
4
1 2
2 4
2 1
4 2
3
1 2
1 3
2 3
stdout
Case #1: 2
Case #2: 2
Case #3: 1