Codeforces Round #648 (Div. 2) A、B、C

題目鏈接: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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章