A. Mountain Scenery
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int n,k,i,m,mon[250];
while(~scanf("%d%d",&n,&k))
{
for(i=1;i<=2*n+1;i++) scanf("%d",&mon[i]);
for(i=2,m=0;i<=2*n;i=i+2)
{
if(mon[i]-mon[i-1]>=2&&mon[i]-mon[i+1]>=2)
{mon[i]--;m++;}
if(m==k) break;
}
for(i=1;i<=2*n+1;i++) cout<<mon[i]<<" ";
cout<<endl;
}
return 0;
}
B.
Airport
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
bool cmp1(int a,int b)
{
return a>b;
}
bool cmp2(int a,int b)
{
return a<b;
}
int main()
{
int n,m,N,air[1005],air1[1005],i,j,Max,Min;
while(~scanf("%d%d",&n,&m))
{
for(i=0;i<m;i++) {scanf("%d",&air[i]);air1[i]=air[i];}
Max=0;Min=0;N=n;
while(N>0)
{
sort(air,air+m,cmp1);
Max+=air[0];
air[0]--;
N--;
}
N=n;
while(N>0)
{
sort(air1,air1+m,cmp2);
for(j=0;j<m;j++)
if(air1[j]!=0)
{
Min+=air1[j];
air1[j]--;
break;
}
N--;
}
cout<<Max<<" "<<Min<<endl;
}
return 0;
}
C.
Ice Skating
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct point
{
int x;
int y;
}p[1005];
int n;
int father[1005];
int Find(int x)
{
return x==father[x] ? x : father[x]=Find(father[x]);
}
int main()
{
int i,j,ans;
while(~scanf("%d",&n)&&n)
{
memset(father,0,sizeof(father));
for(i=0;i<n;i++)
{
scanf("%d%d",&p[i].x,&p[i].y);
father[i]=i;
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(p[i].x==p[j].x||p[i].y==p[j].y)
{
if(Find(i)!=Find(j))
father[Find(i)]=j;
}
}
}
for(i=0,ans=0;i<n;i++)
{
if(father[i]==i) ans++;
}
cout<<ans-1<<endl;
}
return 0;
}