社区讨论
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 条回复,欢迎继续交流。
正在加载回复...