題目鏈接:https://codeforces.ml/contest/1365
A、Matrix Game
思路
很簡單一個博弈問題,用數組記錄每一行每一列是否被佔用,找出能放置棋子的點,看兩個人誰最後一個放即可,具體看代碼。
代碼
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<string>
#include<iomanip>
#include<vector>
#include<map>
using namespace std;
#define inf 0x3f3f3f3f3f
#define ll long long
const int N = 2e5 + 10;
int a[55][55];
int x[100],y[100];
int main()
{
int n,m,t;
cin>>t;
while(t--)
{
memset(x,0,sizeof x);
memset(y,0,sizeof y);
int sum=0;
cin >> n >> m;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++){
cin >> a[i][j];
if(a[i][j]==1)
x[i]=y[j]=1;
}
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
if(x[i]==0&&y[j]==0)
{
sum++;
x[i] = y[j] = 1;
}
}
}
if(sum%2)
cout << "Ashish" <<endl;
else
cout << "Vivek" <<endl;
}
return 0;
}
B、Trouble Sort
思路
思維題,只要種類爲0和種類爲1的數都有,那麼一定可以成功排序,如果全都是0或者全都是1的話,看是否爲遞增序列即可。
代碼
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<string>
#include<iomanip>
#include<vector>
#include<map>
using namespace std;
#define inf 0x3f3f3f3f3f
#define ll long long
int x[505],y[505];
int main()
{
int n,m,t;
cin>>t;
while(t--)
{
cin >> n;
bool flag = 0;
int b0=0,b1=0;
for(int i=0; i<n; i++)
{
cin >> x[i];
if(i>0&&x[i]<x[i-1])
flag = 1;
}
for(int i=0; i<n; i++)
{
cin >> y[i];
if(y[i])
b1++;
else
b0++;
}
if(flag&&(!b1||!b0))
{
cout << "No" <<endl;
continue;
}else{
cout << "Yes" <<endl;
}
}
return 0;
}
C、Rotation Matching
思路
這個題當時沒AC出了,純暴力超時,換了種算法也WA了,大題思路是對的。
a、b數組,記錄b數組元素與a數組元素位置的差值,哪個差值出現的次數最大即出現的配對數目。
代碼
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<string>
#include<iomanip>
#include<vector>
#include<map>
using namespace std;
#define inf 0x3f3f3f3f3f
#define ll long long
const int N=2e5+5;
int a[N],b[N],pd[N];
map<int,int> ma;
int main()
{
int n;
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>a[i];
pd[a[i]]=i;
}
for(int j=1; j<=n; j++)
cin>>b[j];
for(int i=1; i<=n; i++)
{
int dis=pd[b[i]]-i;
if(dis<0)
dis+=n;
ma[dis]++;
}
int ans=0;
for(auto it:ma)
{
ans=max(ans,it.second);
}
cout<<ans<<endl;
return 0;
}