题目:
1.刚开始看得时候没有什么思路,后来看了一下C的范围,发现可以遍历所有情况。
2.因为C的范围是0到1000,最多有50条等式,所以采用遍历每个数值,看其满足的等式条数,最终取最大值。
3.注意我们遍历的时候,不能直接遍历0,1,2…;因为出现等式X > 2和X < 3,X=2.5能够同时满足要求。
4.遍历的时候使用0.5的步进进行判断。
5.输入的时候,cin>>string>>string>>int即可。
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
给定n个关于X的不等式,问最多有多少个成立。
每个不等式为如下的形式之一:
X < C
X <= C
X = C
X > C
X >= C
输入
第一行一个整数n。
以下n行,每行一个不等式。
数据范围:
1<=N<=50,0<=C<=1000
输出
一行一个整数,表示最多可以同时成立的不等式个数。
- 样例输入
-
4 X = 1 X = 2 X = 3 X > 0
- 样例输出
-
2
AC代码:
/* 题目: 1.因为C的范围是0到1000,最多有50条等式,所以采用遍历每个数值,看其满足的等式条数,最终取最大值。 2.注意我们遍历的时候,不能直接遍历0,1,2,3,4,5;因为出现等式X > 2和X < 3,X=2.5能够同时满足要求。 3.遍历的时候使用0.5的步进进行判断。 */ /* 测试用例: 2 X > 2 X < 3 正确答案: 2 6 X = 1 X = 2 X = 3 X > 0 X >= 0 X <= 0 正确答案: 3 */ #include<string> #include <iomanip> #include<fstream> #include<set> #include<queue> #include<map> //#include<unordered_set> //#include<unordered_map> //#include <sstream> //#include "func.h" //#include <list> #include<stdio.h> #include<iostream> #include<string> #include<memory.h> #include<limits.h> //#include<stack> #include<vector> #include <algorithm> using namespace std; bool cal(float&x, pair<string, int>&e) { string op = e.first; int c = e.second; if (op == "<") return x < c; else if (op == "<=") return x <= c; else if (op == ">") return x > c; else if (op == ">=") return x >= c; else return x == c; } /* 函数名 :main 函数功能:主函数 */ int main(void) { int n; cin >> n; vector<pair<string, int>> equation(n); string x; for (int i = 0; i < n; i++) { cin >> x >> equation[i].first >> equation[i].second; } int answer = 0; //遍历0到1000 for (float x = -0.5; x <= 1000.5; x+=0.5) { int tmp = 0; //遍历所有的等式,求出满足的条数 for (int i = 0; i < n; i++) { tmp += cal(x, equation[i]); } answer = max(tmp, answer); } cout << answer << endl; return 0; }