社区讨论
求组 CSP-J T3 70
灌水区参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo5631qh
- 此快照首次捕获于
- 2023/10/25 10:59 2 年前
- 此快照最后确认于
- 2023/10/25 11:50 2 年前
RT,思路没什么好说的,就是膜你。
因为一直没有发现问题,也造不出 HACK,特来求助各位大佬,看看有没有大佬能找到蒟蒻的错误或者提供一个 HACK!
CPP#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#include<queue>
#include<stack>
#include<list>
#include<set>
using namespace std;
const int N=1e5+1;
const int MOD=1e9+7;
int T,M;
vector<int> que;
int gcd(int x,int y){
int az=__builtin_ctz(x),bz=__builtin_ctz(y);
int z=az>bz?bz:az,cha;
y>>=bz;
while(x){
x>>=az;
cha=y-x;
az=__builtin_ctz(cha);
if(x<y){
y=x;
}
x=cha<0?-cha:cha;
}
return y<<z;
}
void irr(int a,int b,int c,int del){
int u=-b,v=2*a,p=1,q=2*a;
bool app=false;
if(u*v<0){
putchar('-');
}
if(u!=0){
u=abs(u),v=abs(v);
int comi=gcd(u,v);
u/=comi,v/=comi;
if(u==1){
printf("%d",v);
}
else{
printf("%d/%d",u,v);
}
app=true;
}
if(q<0){
p=-1;
}
for(int i=2500;i>1;i--){
if(del%que[i]==0){
p*=i;
del/=que[i];
}
}
if(app&&p*q>0){
putchar('+');
}
if(p*q<0){
putchar('-');
}
p=abs(p),q=abs(q);
int comi=gcd(p,q);
p/=comi,q/=comi;
if(p!=1){
printf("%d*",p);
}
printf("sqrt(%d)",del);
if(q!=1){
printf("/%d\n",q);
}
else{
putchar('\n');
}
}
void rat(int a,int b,int c,int del){
int p,q=2*a;
if(q<0){
p=0-del-b;
}
else{
p=del-b;
}
if(p==0){
putchar('0'),putchar('\n');
return;
}
if(p*q<0){
putchar('-');
}
p=abs(p),q=abs(q);
int comi=gcd(p,q);
p/=comi,q/=comi;
if(q==1){
printf("%d\n",p);
return;
}
printf("%d/%d\n",p,q);
}
signed main(){
scanf("%d%d",&T,&M);
for(int i=0;i<=2500;i++){
que.push_back(i*i);
}
int a,b,c;
while(T--){
scanf("%d%d%d",&a,&b,&c);
int delt=b*b-4*a*c;
if(delt<0){
printf("NO\n");
continue;
}
if(*lower_bound(que.begin(),que.end(),delt)==delt){
rat(a,b,c,lower_bound(que.begin(),que.end(),delt)-que.begin());
}
else{
irr(a,b,c,delt);
}
}
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...