社区讨论

IDDFS最大分数可能是多少

P7962[NOIP2021] 方差参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mi0vi6i6
此快照首次捕获于
2025/11/16 06:43
4 个月前
此快照最后确认于
2025/11/16 13:40
4 个月前
查看原帖
RT,IDDFS12pts,可能优化到的最大分数是多少
CPP
#include<bits/stdc++.h>
#define int __int128
#define PII pair<int,int>
#define fir first
#define sec second
#define pc putchar
using namespace std;
namespace IO{
	inline int rd(){
		int x=0,f=1;
		char c=getchar();
		while(c<'0'||c>'9'){
			if(c=='-'){
				f=-1;
			}
			c=getchar();
		}
		while(c>='0'&&c<='9'){
			x=(x<<1)+(x<<3)+(c^48);
			c=getchar();
		}
		return x*f;
	}
	inline void wt(int x){
		if(x<0){
			pc('-');
			x=-x;
		}
		if(x>9){
			wt(x/10);
			pc(x%10+'0');
		}
		else{
			pc(x+'0');
		}
		return ;
	}
}
using namespace IO;
namespace Main{
	const int N=1e4+7,INF=0x3f3f3f3f;
//	int dep=rand()%13;
	int dep=10;
	int n,res=0x3f3f3f3f;
	int s[N];
	string str;
	set<string> st;
	//IDDFS
	inline int gcd(int a,int b){
		return !b?a:gcd(b,a%b);
	}
	inline int result(){
		int t1=0,t2=n;
//		string str="";
		for(int i=1;i<=n;i++){
//			str+=(char)(s[i]+48);
			t1+=s[i];
//			wt(s[i]);
//			pc(' ');
		}
//		wt('\n');
//		if(st.count(str)){
//			return INF;
//		}
//		st.insert(str);
//		cout<<str;
		int t=gcd(t1,t2);
		t1/=t,t2/=t;
		vector<PII> ret={};
		ret.push_back({0,1});
		for(int i=1;i<=n;i++){
			int r1=(s[i]*t2-t1)*(s[i]*t2-t1),r2=t2*t2;
			int x=gcd(r1,r2);
			ret.push_back({r1/x,r2/x});
		}
		int mulx=1,muly=0;
		for(auto i:ret){
			mulx*=i.sec;
		}
		for(auto i:ret){
			muly+=(mulx/i.sec)*i.fir;
		}
		int l=gcd(muly,mulx);
		muly/=l,mulx/=l;
		return muly*n/mulx;
	}
	inline void dfs(int depth){
		if(depth==dep){
			res=min(res,result());
			return ;
		}
		for(int i=2;i<n;i++){
			int t=s[i];
			s[i]=s[i-1]+s[i+1]-t;
			str[i-1]=(char)(s[i]+48);
			if(st.count(str)){
				return ;
			}
			st.insert(str);
			res=min(res,result());
			dfs(depth+1);
			str[i-1]=(char)(t+48);
			s[i]=t;
		}
		return ;
	}
	inline void main(){
		n=rd();
		for(int i=1;i<=n;i++){
			s[i]=rd();
			str+=(char)(s[i]+48);
		}
		dfs(0);
		wt(res);
		return ;
	}
}
signed main(){
//	wt(Main::dep),pc('\n');
	Main::main();
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...