题目描述
昕昕上七年级了,她做到了一道解一元一次不等式组的数学题。
这个一元一次不等式组共有 n 个一元一次不等式。她分别求出了每个不等式的解集,而她需要把它们合并为该不等式组的解集。
每个不等式解集都化简为了最简形式,都形如 x<ti(或 x>t_ix>ti 等),其中 ti 为常数项,x 为未知数。未知数为一个小写英文字母,会在不等号左侧;常数项为一个整数,会在不等号右侧。
所有不等式使用的不等号只有 <,>≤,≥ 四种。在输入输出中, 分别用 <=<= 和 >=>= 代替。
现在昕昕需要你求出该不等式组的解集。
输入格式
第一行为一个正整数 n 和一个小写英文字母x,分别表示有 n 个已简化的不等式解集,和不等式组中的未知数为 x。
接下来 n 行,每行为一个已化简的一元一次不等式,也就是该不等式的解集。
对于每个解集,都由未知数、一个不等号和常数项 ti 依次排列而成,其中未知数为第一行给出的 x。
输出格式
输出一行,即这个不等式组的解集,形如“a\ op1\ x\ op2\ ba op1 x op2 b”或“x\ op\ ax op a”等格式,其中 op1,op2op1,op2 为 <或 <=,opop 为 <,<=,>,>= 或 =,注意不要有多余的空格。
若该不等式组无解,则输出 No Answer!
。
输入输出样例
输入
2 x x>-3 x<=1
输出
-3<x<=1
输入
3 y y>=5 y>4 y>=-2
输出
y>=5
输入
4 q q>=114514 q<-555 q>-200810 q<=-23333
输出
No Answer!
说明/提示
【样例 11 说明】
如图,为数轴上各个不等式解集的公共部分,即为该不等式组的解集,-3 < x \le 1−3<x≤1。注意 \le≤ 在输出中用 <=<= 替换。
【数据规模与约定】
本题采用捆绑测试。
- Subtask 1(5 pts):n=1n=1。
- Subtask 2(25 pts):n=2n=2。
- Subtask 3(10 pts):n \le 100n≤100,-4 \times 10^4 \le t_i \le 4 \times 10^4−4×104≤ti≤4×104。
- Subtask 4(15 pts):n \le 10^4n≤104,-10^5 \le t_i \le 10^5−105≤ti≤105。
- Subtask 5(15 pts):n \le 2 \times 10^4n≤2×104。
- Subtask 6(20 pts):n \le 5 \times 10^4n≤5×104。
- Subtask 7(10 pts):无特殊限制。
对于 100\%100% 的数据,1 \le n \le 6 \times 10^41≤n≤6×104,-10^6 \le t_i \le 10^6−106≤ti≤106,每个不等式中的未知数都是一个小写英文字母。
【提示】
以下为涉及到题目的一些数学知识。
不等式:用不等号联系的关系式。
不等式的解:在含有未知数的不等式中,能使不等式成立的未知数的值。
不等式的解集:不等式的解的全体。
不等式组的解集:不等式组中所有不等式的解集的公共部分。
解不等式组:求不等式组的解集的过程。
解析:
感觉,没有知识点,思维严密,注意分类讨论,考虑特殊情况,按格式输出即可,毕竟是一道普及组的题嘛~~
AC Code: (Clean C With No STL Algorithm)
#include<cstdio>
#include<cstring>
char str[1000];
bool dayes=false;
bool xiaoyes=false;
long long xiao=0x7f7f7f7f,da=-0x7f7f7f7f;
bool dafirst=false;
bool xiaofirst=false;
int main(){
int n;
char c;
scanf("%d %c",&n,&c);
for(int i=1;i<=n;i++){
scanf("%s",&str);
int j=1;
while(j<strlen(str)){
bool fu=false;
bool ude=false;
int num=0;
if(str[j]=='>'){
dafirst=true;
j++;
if(str[j]=='='){
ude=true;
j++;
}
while(j<strlen(str)){
if(str[j]=='-'){
j++;
fu=true;
}
num=(num<<1)+(num<<3)+(str[j]^48);
j++;
}
if(fu){
num=num*-1;
}
if(num>=da){
if(num==da){
if(!dayes && ude){
dayes=ude;
}
}
else{
da=num;
dayes=ude;
}
if(xiao<=da){
if(xiao==da){
if(!(xiaoyes && dayes)){
printf("No Answer!");
return 0;
}
}
else if(xiao<da){
printf("No Answer!");
return 0;
}
}
}
}
else if(str[j]=='<'){
xiaofirst=true;
j++;
if(str[j]=='='){
ude=true;
j++;
}
while(j<strlen(str)){
if(str[j]=='-'){
j++;
fu=true;
}
num=(num<<1)+(num<<3)+(str[j]^48);
j++;
}
if(fu){
num=num*-1;
}
if(num<=xiao){
if(xiao==num){
if(!xiaoyes && ude){
xiaoyes=ude;
}
}
else{
xiaoyes=ude;
xiao=num;
}
if(xiao<=da){
if(xiao==da){
if(!(xiaoyes && dayes)){
printf("No answer");
return 0;
}
}
else if(xiao<da){
printf("No Answer!");
return 0;
}
}
}
}
}
}
if(dafirst && xiaofirst){
if(da==xiao){
printf("%c=%lld",c,da);
return 0;
}
printf("%d<",da);
if(dayes){
putchar('=');
}
printf("%c<",c);
if(xiaoyes){
putchar('=');
}
printf("%lld",xiao);
}
else if(dafirst || xiaofirst){
if(dafirst){
printf("%c>",c);
if(dayes){
putchar('=');
}
printf("%lld",da);
}
else if(xiaofirst){
printf("%c<",c);
if(xiaoyes){
putchar('=');
}
printf("%lld",xiao);
}
}
return 0;
}
测试结果:
Subtask #1
3ms/484.00KBAC#1Accepted, 得分 5. ok accepted
Subtask #2
2ms/624.00KBAC#2Accepted, 得分 25. ok accepted3ms/480.00KBAC#3Accepted, 得分 25. ok accepted2ms/496.00KBAC#4Accepted, 得分 25. ok accepted3ms/612.00KBAC#5Accepted, 得分 25. ok accepted2ms/480.00KBAC#6Accepted, 得分 25. ok accepted
Subtask #3
2ms/624.00KBAC#7Accepted, 得分 10. ok accepted2ms/484.00KBAC#8Accepted, 得分 10. ok accepted
Subtask #4
3ms/612.00KBAC#9Accepted, 得分 15. ok accepted3ms/636.00KBAC#10Accepted, 得分 15. ok accepted3ms/588.00KBAC#11Accepted, 得分 15. ok accepted
Subtask #5
3ms/636.00KBAC#12Accepted, 得分 15. ok accepted4ms/472.00KBAC#13Accepted, 得分 15. ok accepted3ms/648.00KBAC#14Accepted, 得分 15. ok accepted
Subtask #6
5ms/620.00KBAC#15Accepted, 得分 20. ok accepted4ms/640.00KBAC#16Accepted, 得分 20. ok accepted5ms/484.00KBAC#17Accepted, 得分 20. ok accepted4ms/632.00KBAC#18Accepted, 得分 20. ok accepted
Subtask #7
7ms/608.00KBAC#19Accepted, 得分 10. ok accepted6ms/628.00KBAC#20Accepted, 得分 10. ok accepted