#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代码:

/*
题目:
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;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注