fork download
  1. #include <iostream>
  2. #include <string.h>
  3. #include <queue>
  4. using namespace std;
  5. int red=0;
  6. int blue=1;
  7. int rs[9];
  8. int bs[9];
  9. int permRs[9];
  10. int permBs[9];
  11.  
  12. int dfs(int deep,int color,int h,int perm,int n,int m){
  13. if(n+m-1==deep){
  14. return 1;
  15. }else{
  16. int res=0;
  17. if(color==red){
  18. for(int i=0;i<n;i++){
  19. int r=permRs[i];
  20. if((perm & r)==0 && (h<rs[i])){
  21. res+=dfs(deep+1,red,rs[i],(perm|r),n,m);
  22. }
  23. }
  24. for(int i=0;i<m;i++){
  25. int r=permBs[i];
  26. if((perm & r)==0 && (h>bs[i])){
  27. res+=dfs(deep+1,blue,bs[i],(perm|r),n,m);
  28. }
  29. }
  30. }else{
  31. for(int i=0;i<n;i++){
  32. int r=permRs[i];
  33. if((perm & r)==0 && (rs[i]<h)){
  34. res+=dfs(deep+1,red,rs[i],(perm|r),n,m);
  35. }
  36. }
  37. for(int i=0;i<m;i++){
  38. int r=permBs[i];
  39. if((perm & r)==0 && (bs[i]>h)){
  40. res+=dfs(deep+1,blue,bs[i],(perm|r),n,m);
  41. }
  42. }
  43. }
  44. return res;
  45. }
  46. }
  47.  
  48. int main(){
  49. int n,m;
  50. cin>>n>>m;
  51. int r1=1;
  52. for(int i=0;i<n;i++){
  53. cin>>rs[i];
  54. permRs[i]=r1;
  55. r1*=2;
  56. }
  57. for(int i=0;i<m;i++){
  58. cin>>bs[i];
  59. permBs[i]=r1;
  60. r1*=2;
  61. }
  62. int ans=0;
  63. for(int i=0;i<n;i++){
  64. ans+=dfs(1,red,rs[i],permRs[i],n,m);
  65. }
  66. for(int i=0;i<m;i++){
  67. ans+=dfs(1,blue,bs[i],permBs[i],n,m);
  68. }
  69. cout<<ans<<endl;
  70. return 0;
  71. }
Success #stdin #stdout 0s 5320KB
stdin
4 2
6 3 1 4
2 5
stdout
70