放行李(#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;
}