A:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a[3240]={0};
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int num;
        cin>>num;
        a[num]++;
    }
    int u = 0;
    int b[3400];
    for(int i=1;i<=100;i++)
    {
        if(a[i]){b[u]=i;u++;}
    }
    if(u==2&&a[b[0]]==a[b[1]])
    {
        cout<<"YES"<<endl;
        cout<<b[0]<<" "<<b[1];
    }
    else
    {
        cout<<"NO"<<endl;
    }
}

B:

#include<bits/stdc++.h>
using namespace std;
int main()
{
   string a;
   int n;
   cin>>n;
   cin>>a;
   int ma = 0;
   int ji=0;
   int book[130]={0};
   for(int i=0;a[i];i++)
   {
       if(a[i]>='a'&&a[i]<='z')
       {
           book[a[i]]++;
       }
       else
       {
           int num =0 ;
           for(int j='a';j<='z';j++)
           {
               if(book[j])num++;
           }
           ma = max(ma,num);
           memset(book,0,sizeof(book));}
   }
    int num =0 ;
           for(int j='a';j<='z';j++)
           {
               if(book[j])num++;
           }
           ma = max(ma,num);
   cout<<ma<<endl;
}

C:
题意:在数轴上有一个a点,在0点和a点之间有一个f点为加油站(汽油每次可以加到b),汽车从0到a或者从a到0算一次旅行,汽车一开始在0点,汽油为b,求k次旅行最少加油次数,无法满足k次旅行则输出-1.
思路:把点之间的距离变换为数组。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 200000 + 7, INF = 0x3f3f3f3f, mod = 1e9 + 7;
int aa, b, ff, k, ans;
int a[maxn];

int main() {
    scanf("%d %d %d %d", &aa, &b, &ff, &k);
    int n = k+1, f = 1;
    int t1 = 2*ff, t2 = 2*(aa-ff);
    a[1] = t1 / 2; f = 1-f;
    for(int i = 2; i < n; ++i) {
        if(f) {
            a[i] = t1;
            f = 1-f;
        }
        else {
            a[i] = t2;
            f = 1-f;
        }
    }
    if(f) a[n] = t1/2;
    else a[n] = t2/2;
    int c = b;

    for(int i = 1; i <= n; ++i) {
     // cout << a[i] << " == " << endl;
        if(c < a[i]) {
            c = b-a[i];
            ans++;
        }
        else {
            c -= a[i];
        }
        if(c < 0) { printf("-1\n"); return 0; }
    }
    printf("%d\n", ans);

    return 0;
}

D:

#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstring>
#include<cctype>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<iomanip>
#include<sstream>
#include<cstdlib>
#include<ctime>
#include<list>
#include<deque>
#include<bitset>
#include<fstream>
#define ld double
#define ull unsigned long long 
#define ll long long 
#define pii pair<int,int >
#define iiii pair<int,pii >
#define mp make_pair 
#define INF 1000000000
#define MOD 1000000007
#define MAXN 200200
using namespace std;

int a[MAXN],cnt[MAXN],n;
bool flag[MAXN];
set<int>S;

int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",a+i);
        cnt[a[i]]++;

    }


    for(int i=1;i<=n;i++)
        if(cnt[i]==0)
            S.insert(i);

    printf("%d\n",S.size());



    for(int i=0;i<n;i++)
    {
        if(S.empty())break;
        if(cnt[a[i]]==1)continue;
        int x=*S.begin();
        if(flag[a[i]]||x<a[i])//被赋的值小于当前序列值,或者序列当前位置的数前面已经出现过
        {
            S.erase(S.begin());
            cnt[a[i]]--;
            cnt[x]++;
            a[i]=x;
        }
        else flag[a[i]]=true;

    }

    for(int i=0;i<n;i++)
        printf("%d%c",a[i],(i==n-1)?'\n':' ');


    return 0;   
}