这题AC了,可是代码非常long,一看就头晕,求大家帮忙改进!
(注释大多是调试代码)
#include<bits/stdc++.h>
using namespace std;
int n,q,a,b,c,r,l,lw,rw,xw,dw,sum;
int x[200005];
string fc,sa,sb,sc;
int fu;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>q;
for(int i=0;i<n;++i){
a=b=c=0;
cin>>fc;
xw=fc.find('x');
dw=fc.find('=');
sa=fc.substr(0,xw);
sb=fc.substr(xw+1,dw-xw-1);
sc=fc.substr(dw+1,fc.size()-2);
//a
if(sa[0]=='-'){
fu=-1;
}
else{
fu=1;
a=int(sa[0])-'0';
}
for(int i=1;i<sa.size();++i){
a*=10;
a+=fu*(int(sa[i])-'0');
}
//b
if(sb[0]=='-'){
fu=-1;
}
else{
fu=1;
}
for(int i=1;i<sb.size();++i){
b*=10;
b+=fu*(int(sb[i])-'0');
}
//c
if(sc[0]=='-'){
fu=-1;
}
else{
fu=1;
c=int(sc[0])-'0';
}
for(int i=1;i<sc.size();++i){
c*=10;
c+=fu*(int(sc[i])-'0');
}
//\cout<<a<<' '<<b<<' '<<c<<endl;
x[i]=(c-b)/a;
//cout<<x[i]<<endl;
}
sort(x,x+n);/*
for(int i=0;i<n;++i){
cout<<x[i]<<endl;
}*/
for(int i=0;i<q;++i){
cin>>l>>r;
sum=0;
rw=upper_bound(x,x+n,r)-x;
lw=lower_bound(x,x+n,l)-x;
for(int i=lw;i<rw;++i){
if(x[i]!=x[i-1]){
++sum;
}
}
cout<<sum<<endl;
}
return 0;
}