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;
}