求调_入门赛放行李&&最好的交换
  • 板块学术版
  • 楼主canwen
  • 当前回复8
  • 已保存回复8
  • 发布时间2024/5/17 22:20
  • 上次更新2024/5/18 09:54:48
查看原帖
求调_入门赛放行李&&最好的交换
1284815
canwen楼主2024/5/17 22:20

放行李(#18WA,其他AC了)

#include<bits/stdc++.h>
using namespace std;
int l[1000001],r[1000001];
int t,tt;//表示有无答案 答案在左还是右
int ans=0x2f2f2f,ttt; 
int x,y;//我在第几列第几个位置 
int main(){
	int n;
	cin >> n;
	for(int i=1;i<=n;i++)cin>>l[i];
	for(int i=1;i<=n;i++)cin>>r[i];
	cin>>x>>y;
	//模拟左列 在位置左边 
	for(int i=y-1;i>=1;i--){
		if(l[i]==0){
			if(abs(y-i)<ans){
				ans=abs(y-i);
				tt=0;
			}else{
				if(abs(y-i)==ans){
					if(x==0){
						tt=0;
					}
				}
			}
			ttt=1;
			break;
		}
	}
	//模拟左列 在位置右边 
	for(int i=y+1;i<=n;i++){
		if(l[i]==0){
			if(abs(y-i)<ans){
				ans=abs(y-i);
				tt=0;
			}else{
				if(abs(y-i)==ans){
					if(x==0){
						tt=0;
					}
				}
			}
			ttt=1;
			break;
		}
	}
	//模拟右列 在位置左边 
	for(int i=y-1;i>=1;i--){
		if(r[i]==0){
			if(abs(y-i)<ans){
				ans=abs(y-i);
				tt=1;
			}else{
				if(abs(y-i)==ans){
					if(x==1){
						tt=1;
					}
				}
			}
			ttt=1;
			break;
		}
	}
	//模拟右—在位置右边 
	for(int i=y+1;i<=n;i++){
		if(r[i]==0){
			
			if(abs(y-i)<ans){
				ans=abs(y-i);
				tt=1;
			}else{
				if(abs(y-i)==ans){
					if(x==1){
						tt=1;
					}
				}
			}
			ttt=1;
			break;
		}
	}
	
	if(ttt){
		cout<<tt<<" "<<ans;
	}else{
		cout<<"-1";
	}
	
	return 0;
}

最好的交换(我暴力求解,TLE了最后几组测试点,求思路)

#include<bits/stdc++.h>
using namespace std;
int s[1001][1001];
#define shuzu s
int main(){
	long long n,m,q,x,y;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
	cin>>s[i][j];
	for(int i=1;i<=m;i++){
		cin>>q>>x>>y;
		if(x==y)continue;
		if(q==1){
			for(int j=1;j<=n;j++){
			swap(shuzu[x][j],shuzu[y][j]);
		}
		}else{
		for(int j=1;j<=n;j++){
			swap(shuzu[j][x],shuzu[j][y]);
		}	
		}
		
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++)
	cout<<shuzu[i][j]<<" ";
	cout<<endl;
	}
	
	return 0;
}
2024/5/17 22:20
加载中...