题目:
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即可。
描述
给定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代码:
[c language=”++”]
/*
题目:
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;
}
[/c]