114514大定理扩展:修订间差异
外观
创建页面,内容为“'''此页面由26884创建,为114514大定理的扩展打表''' '''计算不可并位的结果的程序:''' #include<bits/stdc++.h> using namespace std; int n=6,a[]={1,1,4,5,1,4},e; string w; struct Node{ int val; string expr; bool opt; inline bool operator<(const Node &other) const{return val<other.val;} }; map<int,Node> tmp; set<Node> dp[6][6]; int main(){ freopen("114514加减乘括号凑数.txt","w",stdout); cout<<"用114514…” |
无编辑摘要 |
||
(未显示1个用户的2个中间版本) | |||
第1行: | 第1行: | ||
'''此页面由[[26884]]创建,为[[114514大定理]] | '''此页面由[[26884]]创建,为[[114514大定理]]的扩展打表程序,具体打表结果不方便放,请自行使用C++11跑程序''' | ||
'''计算不可并位的结果的程序:''' | '''计算不可并位的结果的程序:''' | ||
第28行: | 第28行: | ||
} | } | ||
''' | '''计算可并位的结果的程序:''' | ||
#include<bits/stdc++.h> | |||
using namespace std; | |||
int n=6,a[]={1,1,4,5,1,4},s[6][6],e; | |||
string w; | |||
struct Node{ | |||
int val; | |||
string expr; | |||
bool opt; | |||
inline bool operator<(const Node &other) const{return val<other.val;} | |||
}; | |||
map<int,Node> tmp; | |||
set<Node> dp[6][6]; | |||
int main(){ | |||
freopen("114514加减乘括号凑数(可并位).txt","w",stdout); | |||
cout<<"用114514+-*()凑数(可并位)\n"; | |||
for(int i=0;i<n;++i) s[i][i]=a[i],dp[i][i].insert((Node){a[i],to_string(a[i]),a[i]<0}),a[i]&&(dp[i][i].insert((Node){-a[i],a[i]<0?"-("+to_string(a[i])+")":"-"+to_string(a[i]),1}),0); | |||
for(int i=0;i<n;++i) for(int j=i+1;j<n;++j) s[i][j]=s[i][j-1]*10+a[j]; | |||
for(int i=1;i<n;++i) for(int l=0,r=i;r<n;++l,++r){ | |||
tmp.clear(),tmp[s[l][r]]=(Node){s[l][r],to_string(s[l][r]),s[l][r]<0},s[l][r]&&(tmp[-s[l][r]]=(Node){-s[l][r],s[l][r]<0?"-("+to_string(s[l][r])+")":"-"+to_string(s[l][r]),1},0); | |||
for(int k=l;k<r;++k) for(Node u:dp[l][k]) for(Node v:dp[k+1][r]) w=(v.expr[0]=='-'?u.expr+v.expr:u.expr+'+'+v.expr),e=u.val+v.val,(tmp.find(e)==tmp.end()||w.length()<tmp[e].expr.length())&&(tmp[e]=(Node){e,w,1},0),(tmp.find(-e)==tmp.end()||w.length()+3<tmp[-e].expr.length())&&(tmp[-e]=(Node){-e,"-("+w+")",1},0),w=(u.opt?"("+u.expr+")":u.expr)+"×"+(v.opt?"("+v.expr+")":v.expr),e=u.val*v.val,(tmp.find(e)==tmp.end()||w.length()<tmp[e].expr.length())&&(tmp[e]=(Node){e,w},0); | |||
for(auto p:tmp) dp[l][r].insert(p.second); | |||
} | |||
for(Node ans:dp[0][n-1]) if(ans.val>0) cout<<ans.val<<'='<<ans.expr<<'\n'; | |||
return 0; | |||
} | |||
[[分类:26届]] | |||
[[分类:268]] | |||
[[分类:游戏]] |
2023年5月14日 (日) 14:29的最新版本
此页面由26884创建,为114514大定理的扩展打表程序,具体打表结果不方便放,请自行使用C++11跑程序
计算不可并位的结果的程序:
#include<bits/stdc++.h> using namespace std; int n=6,a[]={1,1,4,5,1,4},e; string w; struct Node{ int val; string expr; bool opt; inline bool operator<(const Node &other) const{return val<other.val;} }; map<int,Node> tmp; set<Node> dp[6][6]; int main(){ freopen("114514加减乘括号凑数.txt","w",stdout); cout<<"用114514+-*()凑数\n"; for(int i=0;i<n;++i) dp[i][i].insert((Node){a[i],to_string(a[i]),a[i]<0}),a[i]&&(dp[i][i].insert((Node){-a[i],a[i] <0?"-("+to_string(a[i])+")":"-"+to_string(a[i]),1}),0); for(int i=1;i<n;++i) for(int l=0,r=i;r<n;++l,++r){ tmp.clear(); for(int k=l;k<r;++k) for(Node u:dp[l][k]) for(Node v:dp[k+1][r]) w=(v.expr[0]=='-'?u.expr+v.expr:u.expr+'+'+v.expr),e=u.val+v.val,(tmp.find(e)==tmp.end()||w.length()<tmp[e].expr.length())&&(tmp[e]=(Node){e,w,1},0),(tmp.find(-e)==tmp.end()||w.length()+3<tmp[-e].expr.length())&&(tmp[-e]=(Node){-e,"-("+w+")",1},0),w=(u.opt?"("+u.expr+")":u.expr)+"×"+(v.opt?"("+v.expr+")":v.expr),e=u.val*v.val,(tmp.find(e)==tmp.end()||w.length()<tmp[e].expr.length())&&(tmp[e]=(Node){e,w},0); for(auto p:tmp) dp[l][r].insert(p.second); } for(Node ans:dp[0][n-1]) if(ans.val>0) cout<<ans.val<<'='<<ans.expr<<'\n'; return 0; }
计算可并位的结果的程序:
#include<bits/stdc++.h> using namespace std; int n=6,a[]={1,1,4,5,1,4},s[6][6],e; string w; struct Node{ int val; string expr; bool opt; inline bool operator<(const Node &other) const{return val<other.val;} }; map<int,Node> tmp; set<Node> dp[6][6]; int main(){ freopen("114514加减乘括号凑数(可并位).txt","w",stdout); cout<<"用114514+-*()凑数(可并位)\n"; for(int i=0;i<n;++i) s[i][i]=a[i],dp[i][i].insert((Node){a[i],to_string(a[i]),a[i]<0}),a[i]&&(dp[i][i].insert((Node){-a[i],a[i]<0?"-("+to_string(a[i])+")":"-"+to_string(a[i]),1}),0); for(int i=0;i<n;++i) for(int j=i+1;j<n;++j) s[i][j]=s[i][j-1]*10+a[j]; for(int i=1;i<n;++i) for(int l=0,r=i;r<n;++l,++r){ tmp.clear(),tmp[s[l][r]]=(Node){s[l][r],to_string(s[l][r]),s[l][r]<0},s[l][r]&&(tmp[-s[l][r]]=(Node){-s[l][r],s[l][r]<0?"-("+to_string(s[l][r])+")":"-"+to_string(s[l][r]),1},0); for(int k=l;k<r;++k) for(Node u:dp[l][k]) for(Node v:dp[k+1][r]) w=(v.expr[0]=='-'?u.expr+v.expr:u.expr+'+'+v.expr),e=u.val+v.val,(tmp.find(e)==tmp.end()||w.length()<tmp[e].expr.length())&&(tmp[e]=(Node){e,w,1},0),(tmp.find(-e)==tmp.end()||w.length()+3<tmp[-e].expr.length())&&(tmp[-e]=(Node){-e,"-("+w+")",1},0),w=(u.opt?"("+u.expr+")":u.expr)+"×"+(v.opt?"("+v.expr+")":v.expr),e=u.val*v.val,(tmp.find(e)==tmp.end()||w.length()<tmp[e].expr.length())&&(tmp[e]=(Node){e,w},0); for(auto p:tmp) dp[l][r].insert(p.second); } for(Node ans:dp[0][n-1]) if(ans.val>0) cout<<ans.val<<'='<<ans.expr<<'\n'; return 0; }