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;
}
我这个代码思路铁定正确,不正确砍我脑祭天