链接
题意:
a和b打球,一个打一个接,接住球自己+1分,接不住另一个人+1分,交替来打。知道最终比分,求可能会有多少个球没被接住。
分析:
咋一看原题,没大看懂题意。首先我们分析:
两个人的顺序:分奇偶,我们设比分是n:m,假设(n<=m)
- 奇:
a b a b a b a
: a比b多一个
我们求出这种状态 丢球的极端情况(最少),我们用1表示接住了,用0表示没接住,比分是2:5a b a b a b a 1 1 1 1 1 1 1 首先我们假设都接住了,然后填0,a最多接住2个所以 1 1 1 1 0 1 0 这样是这个状态0出现最小的一个 2个0, 然后我们看要想比分不变增加0,我们需要将,a为1的和b为1的同时变成0,这样比分不变所以是+2,+2, 一直加到没有a是1,也就是+n个2。
b a b a b a b
: b比a多一个
同样我们也求出极端情况,b a b a b a b 1 1 1 1 1 1 1 也都假设都接住了,a只接住两个 1 1 1 1 1 0 1 最少出现1个0,然后之后也是+2 +2 +2,每次加2,a是1的就会减少一个,知道a都为0,也就是+n次2.这样的都可以
- 偶数:
a b a b a b
3个a 3个b
b a b a b a
也是3个a,3个b 两种情况a=b,所以属于一种情况。
和上面一样分析就好了。
ll n,m;
ll a,b;
ll ans[maxn];
void solve()
{
n=0;
cin>>a>>b;
if(a>b) swap(a,b);
ll sum=a+b;
if(sum%2){
m=sum/2;
for(int i=m-a,j=m-a;i<=m;i++,j+=2){
ans[++n]=j;
}
m=sum/2+1;
for(int i=m-a,j=m-a;i<=m;i++,j+=2){
ans[++n]=j;
}
sort(ans+1,ans+1+n);
cout<<n<<endl;
for(int i=1;i<=n;i++) cout<<ans[i]<<" ";
cout<<endl;
}else {
m=sum/2;
for(int i=m-a,j=m-a;i<=m;i++,j+=2){
ans[++n]=j;
}
sort(ans+1,ans+1+n);
cout<<n<<endl;
for(int i=1;i<=n;i++) cout<<ans[i]<<" ";
cout<<endl;
}
}