关于P1954的SPJ
  • 板块学术版
  • 楼主zyzccc
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/11/15 21:54
  • 上次更新2023/10/27 02:49:54
查看原帖
关于P1954的SPJ
641592
zyzccc楼主2022/11/15 21:54

题目在这

WA的点提示Unexpected end of file - int32 expected 是什么玩意

答案明明是对的,但WA了。

样例1 in:

5 10
5 1 5 3 5
5 3
2 4
2 5
5 1
4 5
4 1
4 3
1 3
2 1
2 3

out

2 4 5 1 3 
4 1 5 2 3 

下面代码

#include<bits/stdc++.h>
using namespace std;
int m,n,l,r,s,cnt,ans,t;
int x[100000],tar[100000];
int a[100000],b[100000],c[100000];
bool f=0;
int calc() {
	int sum=0;
	for(int i=1; i<=n; i++) {
		if(tar[i]>x[i])sum++;
	}
	for(int i=1; i<=m; i++) {
		if(tar[a[i]]>tar[b[i]])sum++;
	}
	return sum;
}
int main() {
	cin>>n>>m;
	for(int i=1; i<=n; i++)
		cin>>x[i];
	for(int i=1; i<=m; i++)
		cin>>a[i]>>b[i];
	for(int i=1; i<=n; i++)
		tar[i]=i;
	for(int i=1;i<=n;i++){
		c[i]=89898989;
	}
	double T=8000;
	srand(1423765);
	int now=calc();
	while(T>0.00001) {
		int q1=rand()%n+1;
		int q2=rand()%n+1;
		swap(tar[q1],tar[q2]);
		int sum=calc();
		if(sum==0) {
			if(!f) {
				for(int i=1;i<=n;i++){
					c[i]=898989898;
				}
				f=1;
				for(int i=1; i<=n; i++) {
					for(int j=1; j<=n; j++) {
						if(tar[j]==i) {
							if(i!=n)
							cout<<j<<' ';
							else cout<<j;
							break;
						}
					}
				}
				cout<<endl;
			}
			for(int i=1; i<=n; i++) {
				c[i]=min(tar[i],c[i]);
			}
		} else if(sum<now) {
			now=sum;
			swap(tar[q1],tar[q2]);
			if(!f) {
				for(int i=1; i<=n; i++) {
					c[i]=min(tar[i],c[i]);
				}
			}
		} else if(exp((now-sum)/T)*10>rand()) {
			now=sum;
		} else {
			swap(tar[q1],tar[q2]);
		}
		T*=0.9998;
	}
	for(int i=1; i<n; i++) {
		cout<<c[i]<<' ';
	}
	cout<<c[n];
}
2022/11/15 21:54
加载中...