#1223 : 不等式

题目:

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代码:
[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]

Leave a Reply

Your email address will not be published. Required fields are marked *