一道大水题
时间限制: C/C++ 2000ms; Java 4000ms 内存限制: 65535KB
通过次数: 44 总提交次数: 1020
问题描述
Dr. Pan作为上兰帝国ACM的总负责人,对队员的队员的训练也是日常关心,他要求每周要有一位队员出一道题目。不知过了多少年,终于轮到Shiyiliang出题了,他费尽脑汁,终于出了一道大水题
给定一个偶数n,n的取值范围为[-1e18,1e18],要求一对整数x,y满足以下条件:
1.x*y==n
2.x与n必须同号,即如果n>0则x>0,n<0则x<0
3.x必须为偶数,y必须为奇数
4.y的取值范围为(-1e18,1e18)
5.使x的值尽可能小的情况下,y的值尽可能大
为了减轻队员的工作量,Dr. pan决定只要求输出y即可.
输入描述
第一行一个T(T<=100000)代表样例数。
接下来T行,每行一个数字代表题目中的n(-1e18<=n<=1e18,保证n为偶数)。
输出描述
输出T行。
每行一个数字代表题目中的y,该数字必须为奇数。
样例输入
1 12
样例输出
3
来源
第三届山西省大学生程序设计大赛
提示
赛后看了其他队的代码,确定自己被卡cin了。。果然以后不能用劳什子cin/cout加速,乖乖scanf吧T_T
1 #include<iostream> 2 #include<cstdio> 3 typedef long long ll; 4 using namespace std; 5 ll x=1e18; 6 int main() 7 { 8 int t; 9 scanf("%d",&t); 10 while(t--) 11 { 12 ll a; 13 scanf("%lld",&a); 14 if(a<0) 15 printf("1\n"); 16 else if(a>0){ 17 while((a&1)==0)a>>=1; 18 printf("%lld\n",a); 19 } 20 else printf("%lld\n",x-1); 21 }return 0; 22 }
原文地址:https://www.cnblogs.com/Surprisezang/p/8996658.html
时间: 2024-10-13 03:32:55