我怎么一直40分!!??
查看原帖
我怎么一直40分!!??
326254
LonginusMonkey楼主2023/7/30 23:31

https://www.luogu.com.cn/record/118189678

这个是测评记录,40分之前讨论蛆里也没有这样的情况

#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node{
	int x, y;
}arr[55];
int ansbest;
int ans, n, m;
int calc() {
	int f__k=0;
	for(int i=0; i<m; ++i) {
		if(arr[i].x+arr[i].y==10) {
			f__k = f__k + (arr[i+1].x+arr[i+1].y)*2;
		}
		else {
			f__k = f__k + arr[i+1].x + arr[i+1].y;
		}
	}
	return f__k;
}
void simulate_anneal_your_mom() {
	for(double t=100000; t>=1e-6; t*=0.97) {
		int fck1 = rand()%m+1, fck2 = rand()%m+1;
		swap(arr[fck1], arr[fck2]);
		int dt = calc() - ans;
		if(m==n && arr[n].x == 10) {
			swap(arr[fck1], arr[fck2]);
		}
		else if(m!=n && arr[n].x != 10) {
			swap(arr[fck1], arr[fck2]);
		}
		else if(exp(double(dt)/t) > double(rand()) / RAND_MAX) {
			ans = calc();
		}
		else
		{
			swap(arr[fck1], arr[fck2]);
		}
		ansbest = max(ansbest, ans);
	}
}
signed main() {
	ios::sync_with_stdio(0); cin.tie(0);
	cin >> n;
	for(int i=1; i<=n; ++i) {
		cin >> arr[i].x >> arr[i].y;
	}
	if(arr[n].x == 10) {
		m = n+1;
		cin >> arr[m].x >> arr[m].y;
	}
	else
	{
		m = n;
	}
//	for(int i=1; i<=m; ++i) {
//		cout << arr[i].x << " " << arr[i].y <<endl;
//	}
//	cout << m << endl;
	ans = calc();
	while(double(clock())/CLOCKS_PER_SEC<0.8) {
		simulate_anneal_your_mom();
	}
	cout << ansbest;
	return 0;
}

我这个代码思路铁定正确,不正确砍我脑祭天

2023/7/30 23:31
加载中...