Simple Game
时间: 1ms 内存:128M
描述:
有一天Misha和Andrew正在玩一个非常简单的游戏。首先,每个玩家选择1到n范围内的整数。让我们假设Misha选择了数字m,Andrew选择了数字a。
然后,让我们通过使用随机生成器以相同的概率在1和n之间范围内随机生成整数c,更接近数字c的玩家是获胜者。如果m和a位于与c相同的距离,Misha会赢。
Andrew非常想赢,所以他请你帮助他。你知道Misha选择的号码m和号码n。您需要确定Andrew选择哪些值使他的胜利的概率是最高的可能。
输入:
第一行包含两个整数n和m(1≤m≤n≤10^9)-游戏中数字的范围,Misha选择的数字。
输出:
一个数字 - 这样的值a,Andrew获胜的概率是最高的。如果有多个这样的值,请打印它们中的最小值。
示例输入:
3 1
示例输出:
2
提示:
参考答案(内存最优[1120]):
#include<stdio.h>
int main()
{
int i,t;
long long int m,n;
scanf("%lld%lld",&n,&m);
if(n==1)
printf("1");
else if(m<=n/2)
printf("%lld",m+1);
else printf("%lld",m-1);
return 0;
}
参考答案(时间最优[2]):
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn=1e5+7;
const double eps=1e-8;
char s[maxn];
ll n,m;
int main()
{
scanf("%lld%lld",&n,&m);
ll ans;
if(n==1)
ans=1;
else if(n==2)
{
if(m==1)
ans=2;
else
ans=1;
}
else if(m>(n/2))
ans=m-1;
else if(m==(n/2))
ans=m+1;
else if(m<(n/2))
ans=m+1;
printf("%lld\n",ans);
return 0;
}
//scanf("%lld%lld",&n,&m);
// ll ans;
// if(n%2!=0)
// {
// ll c=n/2+1;
// if(m==c)
// ans=m;
// else if(m>c)
// {
// ans=n-m+2;
// }
// else if(m<c)
// ans=m+1;
// }
// else
// {
// ll c1=n/2;
// ll c2=n/2+1;
// if(m<c1)
// {
// ans=m+1;
// }
// else if(m==c1)
// {
// ans=m+1;
// }
// else if(m==c2)
// {
// ans=m-1;
// }
// else if(m>c2)
// {
// ans=n-m+2;
// }
// }
// printf("%lld\n",ans);
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。