描述

给定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

题目并没有要求X一定是整数。所以如果算法是枚举X然后统计成立的不等式数目的话,需要每次+0.5枚举所有可能X。
//作者:1085422276
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include<bits/stdc++.h>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
const int inf = ;
inline ll Read()
{
ll x=,f=;
char ch=getchar();
while(ch<''||ch>'')
{
if(ch=='-')f=-;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=x*+ch-'';
ch=getchar();
}
return x*f;
}
ll exgcd(ll a,ll b,ll &x,ll &y)
{
ll temp,p;
if(b==)
{
x=;
y=;
return a;
}
p=exgcd(b,a%b,x,y);
temp=x;
x=y;
y=temp-(a/b)*y;
return p;
}
//*******************************
#define N 101
int ans=,a[N],n,s[N];char b[N][]; int main()
{
n=Read();
for (int i=;i<=n;i++)
{
scanf("%s%s%d",b[i],b[i],&a[i]);
s[i]=strlen(b[i]);
}
for(double t=-0.5;t<=; t+=0.5)
{
int k=;
for (int i=;i<=n;i++)
if ((t==a[i]&&b[i][]=='=')||(t==a[i]&&s[i]==&&b[i][]=='='))
k++;
else if (t>a[i]&&b[i][]=='>') k++;
else if (t<a[i]&&b[i][]=='<') k++;
ans=max(ans,k);
}
cout <<ans<<endl;
return ;
}

代码来自status

05-11 00:29