第五届“校园创客节”C++编程专项比赛初赛(小学)【第一题题解】

· · 个人记录

先上题目

T1小T的奥利奥

时间限制:1000ms 内存限制:256mb

题目背景

小T和明明是一对形影不离的好朋友,他们两有一个共同的爱好,就是用奥利奥泡牛奶吃,周末他两约好各自带上家里的奥利奥去公园里面一起享用。

题目描述

周末到了,小T带了 x 块奥利奥,明明带了y块奥利奥。

但是小T是一个比较强势的小朋友,做什么事情都想要超过别人,所以当小T带的奥利奥没有明明带的奥利奥多时,他就会觉得他俩友谊的小船翻了,并且还会去抢走明明的奥利奥变成自己的。

请问小T至少要抢明明多少块奥利奥,才可以保证小T拥有的奥利奥比明明拥有的奥利奥多。

输入格式

共一行,两个正整数x,y,分别表示小T和明明初始拥有的奥利奥数量。

输出格式

输出一行,一个正整数表示测试用例的答案。

样例数据

输入样例 #1

5 10

输出样例 #1

3

输入样例 #2

1000 1

输出样例 #2

0

数据范围

对于 20% 数据保证,x=1y=1,

对于 30% 数据保证,x>y,

对于 60% 数据保证,1<=x,y<=10^6,

对于 100% 数据保证,1<=x,y<=10^{12}

思路

相信大家小学都看到过类似的一些题目

比如,两筐苹果,第一筐50个,第二筐100个,请问第二筐要给第一筐多少个苹果才能使两筐相等。

都会做吧。

(100-50)/2=25(个)

那么要使第一筐比第二筐多呢?

25+1=26(个)

那么这道题就非常简单了

直接cout<<(y-x)/2+1;

但是,这并不能拿到满分

问题出在哪里了呢?

那就是在x>y的情况下,我们需要特判,输出0。

下面上代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
    ll x,y;
    cin>>x>>y;
    if(x>y){
        cout<<0;
    }else{
        cout<<(y-x)/2+1;
    }
    return 0;
}

不会有人没开long long 吧