输入n个不等式,求同时成立的不等式最多有多少个,数据范围n<=50,不等式右边的数据[0,1000]
分析:这题得转换思路来做,已知数据不超过1000,所以枚举0~1000以内的数,依次计算有多少个不等式满足,然后更新答案,也就是二重循环,1000*50
不过这题没有说一定是整数,如x>2,x<3,如果要求x一定是整数,那么这两个不等式不同时成立,但是这题没有说,所以x可以是浮点数,那么这两个不等式可以同时成立。
因此我们做得到时候把数据扩大一倍,也就是变成[0,2000]来做,不过考虑到边界问题,再变成[-2,2002]枚举
1 #include<iostream> 2 #include<string> 3 #include<vector> 4 using namespace std; 5 6 int n; 7 string s; 8 struct node{ 9 int fg; 10 int x; 11 node(int fg=0,int x=0):fg(fg),x(x){} 12 }; 13 vector<node> v; 14 15 int main() 16 { 17 cin>>n; 18 while(n--){ 19 char c; 20 cin>>c; 21 cin>>s; 22 int x; 23 cin>>x; 24 int fg; 25 if(s=="=") fg=0; 26 if(s==">") fg=1; 27 if(s=="<") fg=-1; 28 if(s=="<=") fg=-2; 29 if(s==">=") fg=2; 30 node no(fg,2*x); 31 v.push_back(no); 32 } 33 int ans=0; 34 for(int i=-2;i<=2002;i++){ 35 int cnt=0; 36 for(int j=0;j<v.size();j++){ 37 int fg=v[j].fg; 38 int x=v[j].x; 39 if(fg==0&&i==x) cnt++; 40 else if(fg==-1&&i<x) cnt++; 41 else if(fg==1&&i>x) cnt++; 42 else if(fg==-2&&i<=x) cnt++; 43 else if(fg==2&&i>=x) cnt++; 44 } 45 ans=max(ans,cnt); 46 } 47 cout<<ans<<endl; 48 }
时间: 2024-10-16 12:32:33