hihocoder-1223-不等式

输入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 }

 

posted @ 2016-09-10 15:38  0_summer  阅读(456)  评论(0编辑  收藏  举报