求助玄学卡时代码
  • 板块P2210 Haywire
  • 楼主ReverBer
  • 当前回复9
  • 已保存回复9
  • 发布时间2024/10/7 15:33
  • 上次更新2024/10/7 17:06:39
查看原帖
求助玄学卡时代码
303531
ReverBer楼主2024/10/7 15:33
#include <bits/stdc++.h>
#define MAX_TIME 1
using namespace std;
typedef long long ll;
//ifstream fin("");
//ofstream fout("");
int n;
int pos[1145];
int fr[1145][10];
mt19937 myrand(time(nullptr));
int g3t(){
	int ans1=0;
	for(int i=1;i<=n;i++){
		ans1=ans1+abs(pos[i]-pos[fr[i][1]])+abs(pos[i]-pos[fr[i][2]])+abs(pos[i]-pos[fr[i][3]]);
	}
	return ans1;
}
int ans=INT_MAX;
void simulatedannealing(){
	
	double begin=10000;
	double end=1e-10;
	double delta=0.996;
	for(double t=begin;t>end;t*=delta){
		int x=myrand()%n+1,y=myrand()%n+1;
		//swap(cows[x],cows[y]);
		swap(pos[x],pos[y]);
		int now=g3t();
		cout<<now<<'\n';
		if(now<ans) ans=now;
		else if (exp((ans-now)/t)<(double(rand())/RAND_MAX)) swap(pos[x],pos[y]);
	}
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(nullptr);
	cout.tie(nullptr);
	
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>fr[i][1]>>fr[i][2]>>fr[i][3];
		pos[i]=i;
	}
	//simulatedannealing();
	while ((double)clock()/CLOCKS_PER_SEC < MAX_TIME) simulatedannealing();
	cout<<ans/2;
	return 0;
}

上述代码加了卡时 但是在我本地答案会直接输出ans预设的极大值,也就是说实际上一次sa都没有跑

但是交在洛谷就能过。

请问本地为什么会出现这样的情况 我的电脑也不算很差啊/yw

2024/10/7 15:33
加载中...