C++ 代码优化:使用多线程同时执行排列组合
#include\u003cbits\u002fstdtr1c++.h\u003e\nusing namespace std;\ninline static const nullptr_t _={\n ios_base::sync_with_stdio(0);\n cin.tie(nullptr),cout.tie(nullptr);\n return nullptr;\n}();\nint n,*b;string a[3];\nvoid f(){\n do{\n string s[3],t;\n t.resize(n);\n for(int i=0;i\u003cn;i++) t[i]='0';\n for(int i=0;i\u003c3;i++) s[i]=a[i];\n for(int i=0;i\u003cn;i++) for(int k=0;k\u003c3;k++) for(int j=0;j\u003cn;j++) if(s[k][j]==i+65) s[k][j]=b[i]|'0';\n for(int i=n-1;~i;i--){\n t[i]+=(s[0][i]^'0')+(s[1][i]^'0');\n if(t[i]-'0'\u003e=n){\n t[i]-=n;\n t[i-1]++;\n }\n }\n if(t==s[2]){\n for(int i=0;i\u003cn;i++) cout\u003cb[i]\u003c' ';\n cout.put(10);\n delete[] b;\n exit(0);\n }\n }while(next_permutation(b,b+n));\n}\nvoid revf(){\n do{\n string s[3],t;\n t.resize(n);\n for(int i=0;i\u003cn;i++) t[i]='0';\n for(int i=0;i\u003c3;i++) s[i]=a[i];\n for(int i=0;i\u003cn;i++) for(int k=0;k\u003c3;k++) for(int j=0;j\u003cn;j++) if(s[k][j]==i+65) s[k][j]=b[i]|'0';\n for(int i=n-1;~i;i--){\n t[i]+=(s[0][i]^'0')+(s[1][i]^'0');\n if(t[i]-'0'\u003e=n){\n t[i]-=n;\n t[i-1]++;\n }\n }\n if(t==s[2]){\n for(int i=0;i\u003cn;i++) cout\u003cb[i]\u003c' ';\n cout.put(10);\n delete[] b;\n exit(0);\n }\n }while(prev_permutation(b,b+n));\n}\nint main(){\n cin\u003en\u003ea[0]\u003ea[1]\u003ea[2];\n b=new int[n];\n for(int i=0;i\u003cn;i++) b[i]=i;\n thread t1(f);\n thread t2(revf);\n t1.join();\n t2.join();\n delete[] b;\n return 0;\n}
原文地址: https://www.cveoy.top/t/topic/pKVR 著作权归作者所有。请勿转载和采集!