hihoCoder挑战赛14 -1223

描述

给定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 = 10000000;
inline ll Read()
{
    ll x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}
ll exgcd(ll a,ll b,ll &x,ll &y)
{
    ll temp,p;
    if(b==0)
    {
        x=1;
        y=0;
        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=0,a[N],n,s[N];char b[N][20];

int main()
 {
     n=Read();
     for (int i=1;i<=n;i++)
      {
          scanf("%s%s%d",b[i],b[i],&a[i]);
          s[i]=strlen(b[i]);
      }
     for(double  t=-0.5;t<=1004; t+=0.5)
      {
          int k=0;
          for (int i=1;i<=n;i++)
           if ((t==a[i]&&b[i][0]=='=')||(t==a[i]&&s[i]==2&&b[i][1]=='='))
             k++;
             else if (t>a[i]&&b[i][0]=='>') k++;
             else if (t<a[i]&&b[i][0]=='<') k++;
          ans=max(ans,k);
      }
     cout <<ans<<endl;
     return 0;
 }
代码来自status
原文地址:https://www.cnblogs.com/zxhl/p/4771779.html