hihoCoder挑战赛14 题目1 : 不等式

来源:互联网 发布:网络优化工程师 华为 编辑:程序博客网 时间:2024/05/06 14:32

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

给定n个关于X的不等式,问最多有多少个成立。

每个不等式为如下的形式之一:

X < C

X <= C

X = C

X > C

X >= C

输入

第一行一个整数n。

以下n行,每行一个不等式。

数据范围:

1<=N<=50,0<=C<=1000

输出

一行一个整数,表示最多可以同时成立的不等式个数。

样例输入
4X = 1X = 2X = 3X > 0
样例输出
2

题意,给出一些不等式,要求,能满足的不等式的个数。

由于,x不一这定整数,直接枚举所有的1 - 1000 和 加上0.5所有的最大值就可以了,也就是映射成-1 -0.5 0 0.5 1 1.5... 等于号,直接加1,其它成段的加1就可以了。复杂度o(n * n );

#define N 2050#define M 100005#define maxn 205#define MOD 1000000000000000007int n,m,num[N];char str[20];int getIndex(int x,bool has){    if(has){        return (x + 1) * 2;    }    else {        return (x + 1) * 2 - 1;    }}int main(){    //freopen("in.txt", "r", stdin);    //freopen("out.txt", "w", stdout);     while(S(n)!=EOF)    {        fill(num,0);        FI(n){           SS(str);           SS(str);           S(m);           if(str[0] == '<'){                if(str[1] == '='){                    int x = getIndex(m,true);                    For(j,0,x+1){                        num[j]++;                    }                }                else {                    int x = getIndex(m,false);                    For(j,0,x+1){                        num[j]++;                    }                }           }           else if(str[0] == '>'){                if(str[1] == '='){                    int x = getIndex(m,true);                    for(int j = x;j<N;j++)                    num[j]++;                }                else {                    int x = getIndex(m,false);                    for(int j = x;j<N;j++)                    num[j]++;                }           }           else if(str[0] == '='){                int x = getIndex(m,true);                num[x]++;           }        }        int ans = 0;        FI(N) ans = max(ans,num[i]);        printf("%d\n",ans);    }    //fclose(stdin);    //fclose(stdout);    return 0;}


0 0
原创粉丝点击