社区讨论
70pts求调
P9750[CSP-J 2023] 一元二次方程参与者 2已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @loczt9ox
- 此快照首次捕获于
- 2023/10/30 22:26 2 年前
- 此快照最后确认于
- 2023/11/02 10:36 2 年前
讨论区的Hack数据都过过一遍了,请问这个程序还能怎么被Hack啊(悲)
CPP#include<bits/stdc++.h>
int num, boundary, gcdnum, tem1, tem2, tem3, coe, tem4, flag, fenmu;
long double x1, x2, last, a, b, c, d;
bool decision(long double n){
int n2 = n / 1;
if(n - n2 != 0){
return false;
}
return true;
}
bool youlishu(long double n, bool enter = true){
if(n == 0){
return false;
}
if(decision(n)){
std::cout << n;
if(enter){
std::cout << '\n';
}
return true;
}
else{
for(int i = 2; i <= 50; i++){
if(decision(i * n)){
std::cout << i * n << "/" << i;
if(enter){
std::cout << '\n';
}
return true;
}
}
}
return false;
}
int wulishu(int n){
int ma = 1;
for(int i = 2; i * i <= n; i++){
if(n % (i * i) == 0){
ma = i * i;
}
}
return ma;
}
int main(){
std::cin >> num >> boundary;
for(int i = 1; i <= num; i++){
std::cin >> a >> b >> c;
if(pow(b, 2) - (4 * a * c) < 0){
std::cout << "NO" << '\n';
}
else{
tem1 = b * b;
tem2 = 4 * a * c;
tem3 = 2 * a;
x1 = (-b + sqrt(tem1 - tem2)) / tem3;
x2 = (-b - sqrt(tem1 - tem2)) / tem3;
last = std::max(x1, x2);
if(last > boundary){
std::cout << "NO" << '\n';
continue;
}
if(youlishu(last)){
continue;
}
if(last == 0){
std::cout << 0 <<'\n';
continue;
}
else{
flag = 1;
fenmu = 0;
if(youlishu(-b / (2 * a), false)){
std::cout << '+';
}
coe = wulishu(tem1 - tem2);
tem4 = coe;
coe = sqrt(coe);
d = coe / (2 * a);
if((tem1 - tem2) / tem4 == 0){
std::cout << 0 << '\n';
continue;
}
if(d == 1|| d == -1){
std::cout << "sqrt(" << (tem1 - tem2) / tem4 << ")" << '\n';
}
else if(decision(d)){
std::cout << abs(d) << "*sqrt(" << (tem1 - tem2) / tem4 << ")" << '\n';
}
else if(decision(1 / d)){
std::cout << "sqrt(" << (tem1 - tem2) / tem4 << ")" << '/' << abs(1/d) << '\n';
}
else{
for(int i = 2; i <= 50; i++){
if(decision(i * d)){
if(i * d == 1){
std::cout << "sqrt(" << (tem1 - tem2) / tem4 << ")" << '/' << i << '\n';
}
std::cout << abs(i * d) << "*sqrt(" << (tem1 - tem2) / tem4 << ")" << '/' << i << '\n';
break;
}
}
}
}
}
}
return 0;
}
回复
共 6 条回复,欢迎继续交流。
正在加载回复...