我正在尝试解决this codechef problem
#include <bits/stdc++.h>
using namespace std;
int main() {
int T;
scanf("%d", &T);
assert(T >= 1 && T <= 50);
while(T--) {
int n,k;
long long int a;
scanf("%d" , &n);
scanf("%ld" , &a);
scanf("%d" , &k);
long int sum = (n-2) * 180;
long long int d = ((sum - (n*a)) * 2 ) / (n*n - n);
long long int kthAngle = a + ((k-1)*d);
printf("%lld 1\n", kthAngle);
}
return 0;
}
在许多情况下,我都得到了正确答案,但在Codechef提交上却得到了错误答案
有人知道吗?
答案 0 :(得分:2)
所获得的d(common_difference)也可以包含被忽略的浮点结果。您也必须考虑这一点,或者像我在修改后的解决方案中给出的那样分别处理分子和分母部分。
因此,在以下情况下,您的解决方案将失败:
3250 21
输出:154 1
您的输出:#include <bits/stdc++.h>
using namespace std;
int main() {
int T;
scanf("%d", &T);
assert(T >= 1 && T <= 50);
while(T--) {
int n,k;
int a;
scanf("%d" , &n);
scanf("%d" , &a);
scanf("%d" , &k);
int sum = (n-2) * 180;
int d_numerator = (sum - (n*a)) * 2 ;
int d_denominator = n * (n-1);
int kthAngle_num = a * d_denominator + ((k-1) * d_numerator);
int kthAngle_den = d_denominator;
int gcd = __gcd(kthAngle_num, kthAngle_den);
printf("%d %d\n", kthAngle_num/gcd, kthAngle_den/gcd);
}
return 0;
}
尝试一下:
password