upload files
Signed-off-by: szdytom <szdytom@qq.com>
This commit is contained in:
commit
e3703197a9
147
.clang-format
Normal file
147
.clang-format
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
Language: Cpp
|
||||||
|
AccessModifierOffset: -4
|
||||||
|
AlignAfterOpenBracket: Align
|
||||||
|
AlignArrayOfStructures: Left
|
||||||
|
AlignConsecutiveMacros: None
|
||||||
|
AlignConsecutiveAssignments: None
|
||||||
|
AlignConsecutiveBitFields: None
|
||||||
|
AlignConsecutiveDeclarations: None
|
||||||
|
AlignEscapedNewlines: Left
|
||||||
|
AlignOperands: Align
|
||||||
|
AlignTrailingComments: true
|
||||||
|
AllowAllArgumentsOnNextLine: false
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: false
|
||||||
|
AllowShortEnumsOnASingleLine: false
|
||||||
|
AllowShortBlocksOnASingleLine: Empty
|
||||||
|
AllowShortCaseLabelsOnASingleLine: false
|
||||||
|
AllowShortFunctionsOnASingleLine: Empty
|
||||||
|
AllowShortLambdasOnASingleLine: All
|
||||||
|
AllowShortIfStatementsOnASingleLine: Never
|
||||||
|
AllowShortLoopsOnASingleLine: false
|
||||||
|
AlwaysBreakAfterDefinitionReturnType: None
|
||||||
|
AlwaysBreakAfterReturnType: None
|
||||||
|
AlwaysBreakBeforeMultilineStrings: false
|
||||||
|
AlwaysBreakTemplateDeclarations: Yes
|
||||||
|
AttributeMacros: []
|
||||||
|
BinPackArguments: false
|
||||||
|
BinPackParameters: false
|
||||||
|
BraceWrapping:
|
||||||
|
AfterCaseLabel: false
|
||||||
|
AfterClass: false
|
||||||
|
AfterControlStatement: Never
|
||||||
|
AfterEnum: false
|
||||||
|
AfterFunction: true
|
||||||
|
AfterNamespace: false
|
||||||
|
AfterObjCDeclaration: false
|
||||||
|
AfterStruct: false
|
||||||
|
AfterUnion: false
|
||||||
|
AfterExternBlock: false
|
||||||
|
BeforeCatch: false
|
||||||
|
BeforeElse: false
|
||||||
|
BeforeLambdaBody: false
|
||||||
|
BeforeWhile: false
|
||||||
|
IndentBraces: false
|
||||||
|
SplitEmptyFunction: false
|
||||||
|
SplitEmptyRecord: false
|
||||||
|
SplitEmptyNamespace: false
|
||||||
|
BreakBeforeBinaryOperators: All
|
||||||
|
BreakBeforeConceptDeclarations: true
|
||||||
|
BreakBeforeBraces: Attach
|
||||||
|
BreakBeforeInheritanceComma: false
|
||||||
|
BreakInheritanceList: BeforeComma
|
||||||
|
BreakBeforeTernaryOperators: true
|
||||||
|
BreakConstructorInitializersBeforeComma: true
|
||||||
|
BreakConstructorInitializers: BeforeComma
|
||||||
|
BreakStringLiterals: true
|
||||||
|
ColumnLimit: 80
|
||||||
|
QualifierAlignment: Left
|
||||||
|
CompactNamespaces: false
|
||||||
|
ConstructorInitializerIndentWidth: 4
|
||||||
|
ContinuationIndentWidth: 4
|
||||||
|
Cpp11BracedListStyle: true
|
||||||
|
DeriveLineEnding: true
|
||||||
|
DerivePointerAlignment: false
|
||||||
|
DisableFormat: false
|
||||||
|
EmptyLineAfterAccessModifier: Never
|
||||||
|
EmptyLineBeforeAccessModifier: Always
|
||||||
|
ExperimentalAutoDetectBinPacking: false
|
||||||
|
PackConstructorInitializers: NextLine
|
||||||
|
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
||||||
|
AllowAllConstructorInitializersOnNextLine: false
|
||||||
|
FixNamespaceComments: true
|
||||||
|
ForEachMacros: []
|
||||||
|
IfMacros: []
|
||||||
|
IncludeBlocks: Merge
|
||||||
|
IndentAccessModifiers: false
|
||||||
|
IndentCaseLabels: false
|
||||||
|
IndentCaseBlocks: false
|
||||||
|
IndentGotoLabels: false
|
||||||
|
IndentPPDirectives: None
|
||||||
|
IndentExternBlock: AfterExternBlock
|
||||||
|
IndentRequires: false
|
||||||
|
IndentWidth: 4
|
||||||
|
IndentWrappedFunctionNames: false
|
||||||
|
InsertTrailingCommas: Wrapped
|
||||||
|
InsertBraces: false
|
||||||
|
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||||
|
LambdaBodyIndentation: Signature
|
||||||
|
MacroBlockBegin: ''
|
||||||
|
MacroBlockEnd: ''
|
||||||
|
MaxEmptyLinesToKeep: 1
|
||||||
|
NamespaceIndentation: None
|
||||||
|
PenaltyBreakAssignment: 2
|
||||||
|
PenaltyBreakBeforeFirstCallParameter: 1
|
||||||
|
PenaltyBreakComment: 300
|
||||||
|
PenaltyBreakFirstLessLess: 120
|
||||||
|
PenaltyBreakOpenParenthesis: 0
|
||||||
|
PenaltyBreakString: 1000
|
||||||
|
PenaltyBreakTemplateDeclaration: 10
|
||||||
|
PenaltyExcessCharacter: 1000000
|
||||||
|
PenaltyReturnTypeOnItsOwnLine: 200
|
||||||
|
PenaltyIndentedWhitespace: 0
|
||||||
|
PointerAlignment: Left
|
||||||
|
PPIndentWidth: -1
|
||||||
|
ReferenceAlignment: Pointer
|
||||||
|
ReflowComments: true
|
||||||
|
RemoveBracesLLVM: false
|
||||||
|
SeparateDefinitionBlocks: Leave
|
||||||
|
ShortNamespaceLines: 1
|
||||||
|
SortIncludes: CaseSensitive
|
||||||
|
SortJavaStaticImport: Before
|
||||||
|
SortUsingDeclarations: true
|
||||||
|
SpaceAfterCStyleCast: false
|
||||||
|
SpaceAfterLogicalNot: false
|
||||||
|
SpaceAfterTemplateKeyword: false
|
||||||
|
SpaceBeforeAssignmentOperators: true
|
||||||
|
SpaceBeforeCaseColon: false
|
||||||
|
SpaceBeforeCpp11BracedList: false
|
||||||
|
SpaceBeforeCtorInitializerColon: false
|
||||||
|
SpaceBeforeInheritanceColon: true
|
||||||
|
SpaceBeforeParens: ControlStatements
|
||||||
|
SpaceBeforeParensOptions:
|
||||||
|
AfterControlStatements: true
|
||||||
|
AfterFunctionDefinitionName: false
|
||||||
|
AfterFunctionDeclarationName: false
|
||||||
|
AfterOverloadedOperator: false
|
||||||
|
BeforeNonEmptyParentheses: false
|
||||||
|
SpaceAroundPointerQualifiers: Default
|
||||||
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
|
SpaceInEmptyBlock: false
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
|
SpacesBeforeTrailingComments: 2
|
||||||
|
SpacesInAngles: Never
|
||||||
|
SpacesInConditionalStatement: false
|
||||||
|
SpacesInContainerLiterals: false
|
||||||
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInLineCommentPrefix:
|
||||||
|
Minimum: 1
|
||||||
|
Maximum: -1
|
||||||
|
SpacesInParentheses: false
|
||||||
|
SpacesInSquareBrackets: false
|
||||||
|
SpaceBeforeSquareBrackets: false
|
||||||
|
BitFieldColonSpacing: Both
|
||||||
|
Standard: Cpp11
|
||||||
|
TabWidth: 4
|
||||||
|
UseCRLF: false
|
||||||
|
UseTab: Always
|
||||||
|
|
4
.gitingore
Normal file
4
.gitingore
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
*.exe
|
||||||
|
*.lexe
|
||||||
|
.vscode
|
||||||
|
*.swp
|
282
optimizer/box-breaker.cpp
Normal file
282
optimizer/box-breaker.cpp
Normal file
@ -0,0 +1,282 @@
|
|||||||
|
#include <bits/stdc++.h>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
const int n = 20;
|
||||||
|
const int q_siz = 20;
|
||||||
|
const double keep_p = 0.97;
|
||||||
|
|
||||||
|
mt19937 mt(114514);
|
||||||
|
uniform_real_distribution<> d01(0, 1);
|
||||||
|
|
||||||
|
struct Question {
|
||||||
|
bitset<20> M[20];
|
||||||
|
int sx, sy, tx, ty, bx, by;
|
||||||
|
};
|
||||||
|
|
||||||
|
Question start_question;
|
||||||
|
|
||||||
|
namespace Solve {
|
||||||
|
bitset<20> mp[20];
|
||||||
|
int dis[20][20][20][20];
|
||||||
|
queue<tuple<int, int, int, int>> qu;
|
||||||
|
|
||||||
|
inline int bfs(int px, int py, int bx, int by, int tx, int ty) {
|
||||||
|
memset(dis, 127, sizeof(dis));
|
||||||
|
while (!qu.empty())
|
||||||
|
qu.pop();
|
||||||
|
|
||||||
|
auto expand = [&](int npx, int npy, int nbx, int nby, int d) {
|
||||||
|
if (npx < 0 || npx >= n)
|
||||||
|
return;
|
||||||
|
if (npy < 0 || npy >= n)
|
||||||
|
return;
|
||||||
|
if (nbx < 0 || nbx >= n)
|
||||||
|
return;
|
||||||
|
if (nby < 0 || nby >= n)
|
||||||
|
return;
|
||||||
|
if (mp[npx][npy] == 0)
|
||||||
|
return;
|
||||||
|
if (mp[nbx][nby] == 0)
|
||||||
|
return;
|
||||||
|
if (npx == nbx && npy == nby)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (dis[npx][npy][nbx][nby] <= d)
|
||||||
|
return;
|
||||||
|
dis[npx][npy][nbx][nby] = d;
|
||||||
|
qu.emplace(npx, npy, nbx, nby);
|
||||||
|
};
|
||||||
|
|
||||||
|
expand(px, py, bx, by, 0);
|
||||||
|
|
||||||
|
while (!qu.empty()) {
|
||||||
|
auto [npx, npy, nbx, nby] = qu.front();
|
||||||
|
int d = dis[npx][npy][nbx][nby];
|
||||||
|
qu.pop();
|
||||||
|
// cout<<"Now player at ( "<<npx<<" , "<<npy<<" ) and box at ( "<<nbx<<"
|
||||||
|
// , "<<nby<<" ) and dis = "<<d<<endl;
|
||||||
|
|
||||||
|
if (nbx == tx && nby == ty)
|
||||||
|
return d;
|
||||||
|
|
||||||
|
expand(npx + 1, npy, nbx, nby, d + 1);
|
||||||
|
expand(npx - 1, npy, nbx, nby, d + 1);
|
||||||
|
expand(npx, npy + 1, nbx, nby, d + 1);
|
||||||
|
expand(npx, npy - 1, nbx, nby, d + 1);
|
||||||
|
if (npx + 1 == nbx && npy == nby)
|
||||||
|
expand(npx + 1, npy, nbx + 1, nby, d + 1);
|
||||||
|
if (npx - 1 == nbx && npy == nby)
|
||||||
|
expand(npx - 1, npy, nbx - 1, nby, d + 1);
|
||||||
|
if (npx == nbx && npy + 1 == nby)
|
||||||
|
expand(npx, npy + 1, nbx, nby + 1, d + 1);
|
||||||
|
if (npx == nbx && npy - 1 == nby)
|
||||||
|
expand(npx, npy - 1, nbx, nby - 1, d + 1);
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline int solve(Question q) {
|
||||||
|
memcpy(mp, q.M, sizeof(q.M));
|
||||||
|
return bfs(q.sx, q.sy, q.bx, q.by, q.tx, q.ty);
|
||||||
|
}
|
||||||
|
}; // namespace Solve
|
||||||
|
|
||||||
|
vector<pair<Question, int>> prq, nwq;
|
||||||
|
|
||||||
|
inline void constructMain() {
|
||||||
|
auto expand = [&](Question q) {
|
||||||
|
if (q.sx < 0 || q.sx >= n)
|
||||||
|
return;
|
||||||
|
if (q.sy < 0 || q.sy >= n)
|
||||||
|
return;
|
||||||
|
if (q.bx < 0 || q.bx >= n)
|
||||||
|
return;
|
||||||
|
if (q.by < 0 || q.by >= n)
|
||||||
|
return;
|
||||||
|
if (q.tx < 0 || q.tx >= n)
|
||||||
|
return;
|
||||||
|
if (q.ty < 0 || q.ty >= n)
|
||||||
|
return;
|
||||||
|
if (q.M[q.sx][q.sy] == 0)
|
||||||
|
return;
|
||||||
|
if (q.M[q.bx][q.by] == 0)
|
||||||
|
return;
|
||||||
|
if (q.M[q.tx][q.ty] == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int d = Solve::solve(q);
|
||||||
|
nwq.push_back({q, d});
|
||||||
|
};
|
||||||
|
auto expandAll = [&](Question q) {
|
||||||
|
expand(q);
|
||||||
|
|
||||||
|
q.sx--;
|
||||||
|
expand(q);
|
||||||
|
q.sx++;
|
||||||
|
|
||||||
|
q.sx++;
|
||||||
|
expand(q);
|
||||||
|
q.sx--;
|
||||||
|
|
||||||
|
q.sy--;
|
||||||
|
expand(q);
|
||||||
|
q.sy++;
|
||||||
|
|
||||||
|
q.sy++;
|
||||||
|
expand(q);
|
||||||
|
q.sy--;
|
||||||
|
|
||||||
|
q.bx--;
|
||||||
|
expand(q);
|
||||||
|
q.bx++;
|
||||||
|
|
||||||
|
q.bx++;
|
||||||
|
expand(q);
|
||||||
|
q.bx--;
|
||||||
|
|
||||||
|
q.by--;
|
||||||
|
expand(q);
|
||||||
|
q.by++;
|
||||||
|
|
||||||
|
q.by++;
|
||||||
|
expand(q);
|
||||||
|
q.by--;
|
||||||
|
|
||||||
|
q.tx--;
|
||||||
|
expand(q);
|
||||||
|
q.tx++;
|
||||||
|
|
||||||
|
q.tx++;
|
||||||
|
expand(q);
|
||||||
|
q.tx--;
|
||||||
|
|
||||||
|
q.ty--;
|
||||||
|
expand(q);
|
||||||
|
q.ty++;
|
||||||
|
|
||||||
|
q.ty++;
|
||||||
|
expand(q);
|
||||||
|
q.ty--;
|
||||||
|
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
for (int j = 0; j < n; j++) {
|
||||||
|
q.M[i][j] = !q.M[i][j];
|
||||||
|
expand(q);
|
||||||
|
q.M[i][j] = !q.M[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Question q1 = q;
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
for (int j = 0; j < n; j++) {
|
||||||
|
int x = (d01(mt) <= 0.3);
|
||||||
|
q1.M[i][j] = q1.M[i][j] ^ x;
|
||||||
|
if ((i == q1.sx && j == q1.sy) || (i == q1.bx && j == q1.by)
|
||||||
|
|| (i == q1.tx && j == q1.ty))
|
||||||
|
q1.M[i][j] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
expand(q1);
|
||||||
|
};
|
||||||
|
|
||||||
|
prq.push_back({start_question, Solve::solve(start_question)});
|
||||||
|
for (int _ = 1;; _++, swap(prq, nwq)) {
|
||||||
|
for (pair<Question, int> pr : prq)
|
||||||
|
expandAll(pr.first);
|
||||||
|
sort(nwq.begin(),
|
||||||
|
nwq.end(),
|
||||||
|
[&](const pair<Question, int>& a, const pair<Question, int>& b) {
|
||||||
|
return a.second > b.second;
|
||||||
|
});
|
||||||
|
vector<pair<Question, int>> tmp(0);
|
||||||
|
double nwpw = 1;
|
||||||
|
for (int i = 0; i < nwq.size(); i++) {
|
||||||
|
if (d01(mt) <= nwpw)
|
||||||
|
tmp.push_back(nwq[i]);
|
||||||
|
nwpw *= keep_p;
|
||||||
|
}
|
||||||
|
nwq = tmp;
|
||||||
|
|
||||||
|
if (_ % 1 == 0) {
|
||||||
|
cout << "Iterated for " << _ << " times" << endl;
|
||||||
|
Question mxq = nwq.front().first;
|
||||||
|
cout << "Max step = " << nwq.front().second << endl;
|
||||||
|
|
||||||
|
// cout<<"***************************"<<endl;
|
||||||
|
// for(int i=0;i<n;i++)
|
||||||
|
// {
|
||||||
|
// for(int j=0;j<n;j++)
|
||||||
|
// {
|
||||||
|
// if(i==mxq.sx&&j==mxq.sy) cout<<"P";
|
||||||
|
// else if(i==mxq.tx&&j==mxq.ty) cout<<"O";
|
||||||
|
// else if(i==mxq.bx&&j==mxq.by) cout<<"*";
|
||||||
|
// else if(mxq.M[i][j]==0) cout<<"#";
|
||||||
|
// else cout<<".";
|
||||||
|
// }
|
||||||
|
// cout<<endl;
|
||||||
|
// }
|
||||||
|
// cout<<"***************************"<<endl;
|
||||||
|
|
||||||
|
fstream fou("nowmax.txt", ios::out);
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
for (int j = 0; j < n; j++) {
|
||||||
|
if (i == mxq.sx && j == mxq.sy)
|
||||||
|
fou << "P";
|
||||||
|
else if (i == mxq.tx && j == mxq.ty)
|
||||||
|
fou << "O";
|
||||||
|
else if (i == mxq.bx && j == mxq.by)
|
||||||
|
fou << "*";
|
||||||
|
else if (mxq.M[i][j] == 0)
|
||||||
|
fou << "#";
|
||||||
|
else
|
||||||
|
fou << ".";
|
||||||
|
}
|
||||||
|
fou << endl;
|
||||||
|
}
|
||||||
|
fou.close();
|
||||||
|
system("cp nowmax.txt nowmax-cp.txt");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void init() {
|
||||||
|
fstream fin("nowmax.txt", ios::in);
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
string s;
|
||||||
|
fin >> s;
|
||||||
|
for (int j = 0; j < n; j++) {
|
||||||
|
if (s[j] == '#')
|
||||||
|
start_question.M[i][j] = 0;
|
||||||
|
else
|
||||||
|
start_question.M[i][j] = 1;
|
||||||
|
|
||||||
|
if (s[j] == 'P')
|
||||||
|
start_question.sx = i, start_question.sy = j;
|
||||||
|
if (s[j] == '*')
|
||||||
|
start_question.bx = i, start_question.by = j;
|
||||||
|
if (s[j] == 'O')
|
||||||
|
start_question.tx = i, start_question.ty = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// cout<<"Start question : *********************"<<endl;
|
||||||
|
// for(int i=0;i<n;i++)
|
||||||
|
// {
|
||||||
|
// for(int j=0;j<n;j++)
|
||||||
|
// {
|
||||||
|
// cout<<start_question.M[i][j];
|
||||||
|
// }
|
||||||
|
// cout<<endl;
|
||||||
|
// }
|
||||||
|
// cout<<"sx = "<<start_question.sx<<" , sy = "<<start_question.sy<<endl;
|
||||||
|
// cout<<"bx = "<<start_question.bx<<" , by = "<<start_question.by<<endl;
|
||||||
|
// cout<<"tx = "<<start_question.tx<<" , ty = "<<start_question.ty<<endl;
|
||||||
|
// cout<<"**************************************"<<endl;
|
||||||
|
fin.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
init();
|
||||||
|
|
||||||
|
// cout<<Solve::solve(start_question)<<endl;
|
||||||
|
|
||||||
|
constructMain();
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user