一扶苏一 @ 2022-03-26 22:30:56
根据这一帖子和管理组成员的讨论,在一些情况下直接使用 sqrt 函数可能会因为误差和整形舍入得到错误的结果。
但是造数据的人太菜了不会造,如果您能提供这样的数据,请发帖或联系任何一位题目管理员,谢谢。
by ttcwws @ 2022-03-26 22:34:09
sqrtl是个好东西(
by heaksicn @ 2022-03-26 22:34:25
hack:
500000
998244353 996491788296388609
998244353 996491788296388609
998244353 996491788296388609
...
998244353 996491788296388609
by fzj2007 @ 2022-03-26 22:34:48
用sqrtl
就行了(
by A_zjzj @ 2022-03-26 22:34:48
而且我觉得时间上面也可以加强一下,因为我的骗分的代码过了(可是考场有地方没有转long long变成40分/kk) 提交记录:
by heaksicn @ 2022-03-26 22:34:51
可以卡掉ylmylm的代码。
by A_zjzj @ 2022-03-26 22:35:18
这里
by cleverxia @ 2022-03-26 23:06:23
@heaksicnhhhylm 太单一了,判重能过
生成器:
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
srand(time(0));//我一般用c++11<random>
cout<<100000<<endl;
for(int i=1000000000;i>999950000;i--)cout<<i<<' '<<i*i<<endl<<i<<' '<<i*i-rand()%i<<endl;
}
by 比利♂海灵顿 @ 2022-03-27 08:30:03
@heaksicnhhhylm 你这本来就是 -1
, 就算它搞成
by qijt @ 2022-03-28 13:10:26
hack
8 32
输出
2
by ColinKIA @ 2022-04-01 22:48:44
严重怀疑民间数据有问题,按照官方题解思路做,民间数据wa了??????
#include <cstdio>
#include <cmath>
long long T,x,z,d,y;
long long gcd(long long x, long long y) {
if (x%y==0) return y;
else return gcd(y, x%y);
}
int main(){
scanf("%lld",&T);
while(T--){
scanf("%lld%lld",&x,&z);
if(z % x){
printf("-1\n");
continue;
}
d=sqrt(gcd(x*x,z/x)),y=z/x/d;
if (gcd(x, y)==d){
printf("%lld\n",y);
} else {
printf("-1\n");
}
}
return 0;
}