跳转到内容

HYWiki不是一个完全开放的网站。大部分的内容只有在您登录账号后才可阅读。您可以前往这个链接提交账号注册申请。

114514大定理扩展:修订间差异

来自HYWiki,开放的校园百科
268public留言 | 贡献
创建页面,内容为“'''此页面由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…”
 
268public留言 | 贡献
无编辑摘要
第1行: 第1行:
'''此页面由[[26884]]创建,为[[114514大定理]]的扩展打表'''
'''此页面由[[26884]]创建,为[[114514大定理]]的扩展打表程序,具体打表结果不方便放,请自行使用C++11跑程序'''


'''计算不可并位的结果的程序:'''
'''计算不可并位的结果的程序:'''
第28行: 第28行:
  }
  }


'''打表结果'''
'''计算可并位的结果的程序'''

2023年5月5日 (五) 11:18的版本

此页面由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;
}

计算可并位的结果的程序