CF 1561 B. Charmed by the Game(思维)

链接

题意:

a和b打球,一个打一个接,接住球自己+1分,接不住另一个人+1分,交替来打。知道最终比分,求可能会有多少个球没被接住。

分析:

咋一看原题,没大看懂题意。首先我们分析:
两个人的顺序:分奇偶,我们设比分是n:m,假设(n<=m)

  1. 奇:
    a b a b a b a : a比b多一个
    我们求出这种状态 丢球的极端情况(最少),我们用1表示接住了,用0表示没接住,比分是2:5
    a 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.这样的都可以	
    
  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;
   	}
}   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值