时间限制: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
解题思路
记录每个不等式的符号和常数C,最后枚举X,找出最多可以同时成立的不等式个数,注意X没有说是整数
#pragma comment(linker,"/STACK:102400000,102400000") #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <iomanip> #include <cmath> #include <algorithm> #include <stack> #include <queue> #include <map> #include <fstream> using namespace std; typedef long long ll; const int INF = 0x3f3f3f3f; const int MAX = 0x7fffffff; const ll LINF = 0x3f3f3f3f3f3f3f3f; const ll LMAX = 0x7fffffffffffffff; const double pi=acos(-1.0); const int maxn = 100000+5; const int maxm = 100000+5; const int mod = 1000000007; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 struct node { int op; int c; } data[50+5]; int strToint(string s,int index) { int re=0; for(int i=index; i<s.length(); ++i) { re=re*10+s[i]-‘0‘; } return re; } int main() { //freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); int n; //while(cin>>n) cin>>n; { getchar(); string s; int c; for(int i=1; i<=n; ++i) { cin>>s>>s>>c; data[i].c=c; if(s=="<") { data[i].op=1; } else if(s=="<=") { data[i].op=2; } else if(s=="=") { data[i].op=3; } else if(s==">=") { data[i].op=4; } else { data[i].op=5; } } int ans=0; for(double x=-0.5; x<=1000.5; x+=0.5) { int num=0; for(int j=1; j<=n; ++j) { switch(data[j].op) { case 1: if(x<data[j].c) num++; break; case 2: if(x<=data[j].c) num++; break; case 3: if(x==data[j].c) num++; break; case 4: if(x>=data[j].c) num++; break; case 5: if(x>data[j].c) num++; break; } } ans=max(num,ans); } cout<<ans<<endl; } return 0; }
总结
犯了好多错误,都是一些细节问题.
开始采用getline()读入,把X当成整数处理,X从零枚举到1000,错了三次,4A
时间: 2024-11-05 08:46:30