嘿嘿嘿
水题使我快乐~~~
C题 Constructive Problems Never Die
大意:有a数组,输出b数组(从1~n),使 思路:遇到 的,swap一下就好了
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll i,n,m,k,l,j;
ll a[100005],b[100005];
int main()
{
cin>>l;
while(l--)
{
ll fl=1;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a[i];
b[i]=i;
}
for(i=1;i<n;i++)
{
if(a[i]!=a[i+1])
{
fl=0;
break;
}
}
if(fl)
{
cout<<"NO\n";
}
else
{
for(ll i=1;i<=n;i++)
{
if(a[i]==b[i])
{
for(ll j=1;j<=n;j++)
{
if(a[i]!=b[j]&&b[i]!=a[j])
{
swap(b[i],b[j]);
}
}
}
}
cout<<"YES\n";
for(ll i=1;i<=n;i++)cout<<b[i]<<" ";
cout<<"\n";
}
}
}
不会有人要漂代码吧
F题 Candies
整个列表暴力过去就好了 首尾加个特判。 这里弄个更高级的:
#include <bits/stdc++.h>
int a[101010],n,k,as=0;
int main(){
scanf("%d%d",&n,&k);
int x,y;
for (int i=0;i<n;++i) {
scanf("%d",&x);
if(x>=k-x) x=k-x;
else x=x;
if (i&&x==a[i-1]) i-=2,n-=2,++as;
else a[i]=x;
}
x=0,y=n-1;
while (x<y&&a[x]==a[y]) ++x,--y,++as;
printf("%d",as);
return 0;
}
我做的时候居然时间超限,后来看看,96分,哭死。TNND
又水了一篇文章呢。

京公网安备 11010502036488号