题意:给你一定数目的彩球,任意两个相同颜色的彩球可产生一异于此颜色的球,判断是否能满足条件产生给定数量的彩球
思路:原彩球减去给定球,大于零则除以2,否则直接加
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main()
{
int a,b,c;
int a1,b1,c1;
while(scanf("%d %d %d %d %d %d",&a,&b,&c,&a1,&b1,&c1)!=EOF)
{
int ans=0;
a=a-a1;
b=b-b1;
c=c-c1;
if(a>=0)
ans+=a/2;
else
ans+=a;
if(b>=0)
ans+=b/2;
else
ans+=b;
if(c>=0)
ans+=c/2;
else
ans+=c;
if(ans>=0)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
B. Testing Robots
#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
const int maxn=500+5;
int sign[maxn][maxn];
string s ;
int main()
{
int n,m,x,y;
int ans;
while(cin>>n>>m>>x>>y)
{
cin>>s;
cout<<1<<" ";
memset(sign,0,sizeof(sign));
ans=0;
for(int i=0;i<s.size()-1;i++)
{
sign[x][y]=1;
if(s[i]=='U'&&x>1) x--;
if(s[i]=='D'&&x<n) x++;
if(s[i]=='L'&&y>1) y--;
if(s[i]=='R'&&y<m) y++;
if(sign[x][y]==1)
cout<<0<<" ";
else
{
cout<<1<<" ";ans++;
}
}
cout<<n*m-ans-1<<endl;
}
return 0;
}
Sorting Railway Cars
题意:给你一个序列,你可以将序列中的任意一个数取出来放到序列的第一位或者最后一位,问你最少多少次就可以把该序列转换成一个递增的序列。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include <bits/stdc++.h>
using namespace std;
const int maxn=100000+5;
int pos[maxn];
int p[maxn];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
{
scanf("%d",&p[i]);
pos[p[i]]=i;
}
int ans=1,a=0;
for(int i=1;i<=n;i++)
{
if(pos[i]>pos[i-1])
a++;
else
a=1;
ans=max(ans,a);
}
printf("%d\n",n-ans);
}
return 0;
}