mxqz 样例能过,交上去 TLE #1
查看原帖
mxqz 样例能过,交上去 TLE #1
234074
樱雪喵>w<楼主2023/3/13 16:06

RT,求一个 hack 策略,不用帮调,谢谢大佬们 QAQ

#include<bits/stdc++.h>
#define il inline
using namespace std;
il int read()
{
	int xr=0,F=1; char cr=getchar();
	while(cr<'0'||cr>'9') {if(cr=='-') F=-1;cr=getchar();}
	while(cr>='0'&&cr<='9')
		xr=(xr<<3)+(xr<<1)+(cr^48),cr=getchar();
	return xr*F;
}
const int N=105;
int n,a[N][N];
struct node{
	int w,to;
};
bool cmp1(node x,node y) {return x.w<y.w;}
bool cmp2(node x,node y) {return x.w>y.w;}
vector<node> el[N],er[N];
int rkl[N][N],rkr[N][N],matl[N],matr[N],vis[N];
bool dfs(int u)
{
	for(node vv:el[u])
	{
		int v=vv.to;
		if(vis[v]) continue;vis[v]=1;
		if(!matr[v]) {matl[u]=v,matr[v]=u;return 1;}
		else if(rkr[v][u]<rkr[v][matr[v]]) 
			{dfs(matr[v]);matl[u]=v,matr[v]=u;return 1;}
	}
	return 0;
}
void solve()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++) 
			cin>>a[i][j];
	cout<<'B'<<endl;cout.flush();
	char c;cin>>c;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++) 
		{
			if(c=='I')
				el[i].push_back({a[i][j],j}),
				er[j].push_back({a[i][j],i});
			else
				el[i].push_back({-a[i][j],j}),
				er[j].push_back({-a[i][j],i});
		}
	for(int i=1;i<=n;i++) 
	{
		sort(el[i].begin(),el[i].end(),cmp2);
		for(int j=1;j<=n;j++)
			rkl[i][el[i][j-1].to]=j;
	}
	for(int i=1;i<=n;i++) 
	{
		sort(er[i].begin(),er[i].end(),cmp1);
		for(int j=1;j<=n;j++)
			rkr[i][er[i][j-1].to]=j;
	}
	memset(matl,0,sizeof(matl)),memset(matr,0,sizeof(matr));
	for(int i=1;i<=n;i++) 
	{
		memset(vis,0,sizeof(vis));
		dfs(i);
	}
//	for(int i=1;i<=n;i++) cout<<matl[i]+n<<" ";
//	cout<<endl;
	int st=read();
	if(st!=-1)
	{
	while("qwq")
	{
		if(st<=n) cout<<matl[st]+n<<endl;
		else cout<<matr[st-n]<<endl;
		//st=read();
		cin>>st;
		if(st==-1||st==-2) break;
	}
	}
	for(int i=1;i<=n;i++) el[i].clear(),er[i].clear();
}
int main()
{
//	int T=read();
	int T;cin>>T;
	while(T--) solve();
	return 0;
}
/*
2
3
3 1 9
2 5 7
6 4 8
*/
2023/3/13 16:06
加载中...