A. Chess Tourney

题意:给定长度为2*n的数组,要求将其分为2组,使得a[i]>a[i+n]  i∈[1,n]


思路:sort,判断中间两个数会不会相等。如果相等,不成立。反之,成立。


CODE:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int a[300];

int main(void)
{
    int n;
    cin >> n;
    for(int i=1;i<=2*n;i++)
        scanf("%d",&a[i]);
    sort(a+1,a+1+2*n);
    if(a[n]==a[n+1])
        cout << "NO" << endl;
    else
        cout <<"YES" << endl;
}




B.Luba And The Ticket(补)

题意:给定长度为6的字符串。要求改变最少次,使得s[1]+s[2]+s[3]==s[4]+s[5]+s[6]。 每次可以改变一个数


思路:暴力


复杂度O(9^6)


CODE:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

char str[50];

int main(void)
{
    int ans=INT_MAX;
    scanf("%s",str+1);
    int i,j,k,a,b,c;
    for(i=0; i<=9; i++)
    {
        for(j=0; j<=9; j++)
        {
            for(k=0; k<=9; k++)
            {
                for(a=0; a<=9; a++)
                {
                    for(b=0; b<=9; b++)
                    {
                        for(c=0; c<=9; c++)
                        {
                            if(i+j+k == a+b+c)
                            {
                                int cnt=0;
                                if(str[1]-'0'!=i)   cnt++;
                                if(str[2]-'0'!=j)   cnt++;
                                if(str[3]-'0'!=k)   cnt++;
                                if(str[4]-'0'!=a)   cnt++;
                                if(str[5]-'0'!=b)   cnt++;
                                if(str[6]-'0'!=c)   cnt++;
                                ans=min(ans,cnt);
                            }
                        }
                    }
                }
            }
        }
    }
    cout << ans << endl;
    return 0;
}


C. Two TVs

题意:已知n个区间[L,R]。要求不出现一个点在三个集合的情况。


思路:用map来保存每一个区间的起点和终点。i.e.  mp[L]++,mp[R+1]--。 模拟一遍即可。其中map的值代表当前点出现的次数。


CODE:


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

map <int,int> mp;

int main(void)
{
    int n;
    cin>> n;
    for(int i=1;i<=n;i++)
    {
        int l,r;
        scanf("%d%d",&l,&r);
        mp[l]++,mp[r+1]--;
    }
    int sum=0;
    for(map<int,int>::iterator it=mp.begin();it!=mp.end();it++)
    {
        sum+=it -> second;
        if(sum>=3)
        {
            return 0*printf("NO\n");
        }
    }
    return 0*printf("YES\n");
}