E-不等式是否满足约束并输出最大差(100p)

不等式是否满足约束并输出最大差

问题描述

给定一组不等式,需要判断这些不等式是否全部成立,并计算不等式的最大差值。最大差值定义为所有不等式左边减去右边的最大值,输出时取整数部分(注意:不是向下取整)。

具体要求如下:

  1. 不等式系数为 double 类型,以二维数组形式给出。
  2. 不等式变量为 int 类型,以一维数组形式给出。
  3. 不等式右侧常数项为 double 类型,以一维数组形式给出。
  4. 不等式约束符号为字符串数组,只能是 ">", ">=", "<", "<=", "="。

输入格式

输入为一行字符串,包含以下内容(用分号分隔):

  1. 不等式系数(double 类型)
  2. 不等式变量(int 类型)
  3. 不等式右侧常数项(double 类型)
  4. 不等式约束符号(字符串类型) a11,a12,a13,a14,a15,a21,a22,a23,a24,a25, a31,a32,a33,a34,a35,x1,x2,x3,x4,x5,b1,b2,b3,<=,<=,<=

1)不等式组系数(double类型):

a11,a12,a13,a14,a15

a21,a22,a23,a24,a25

a31,a32,a33,a34,a35

2)不等式变量(int类型):x1,x2,x3,x4,x5

3)不等式目标值(double类型):b1,b2,b3

4)不等式约束(字符串类型):<=,<=,<=

输出格式

输出两行:

  1. 第一行输出 "true" 或 "false",表示不等式组是否全部成立。
  2. 第二行输出一个整数,表示最大差值的整数部分。

样例输入1

2.3,3,5.6,7,6;11,3,8.6,25,1;0.3,9,5.3,66,7.8;1,3,2,7,5;340,670,80.6;<=,<=,<=

样例输出1

false
458

样例输入2

2.36,3,6,7.1,6;1,30,8.6,2.5,21;0.3,69,5.3,6.6,7.8;1,13,2,17,5;340,67,300.6;<=,>=,<=

样例输出2

false
758

解释说明

样例 解释说明
样例1 输入包含三个不等式,所有不等式的约束都是 <=。计算结果显示不等式组不全部成立,最大差值的整数部分是 458。
样例2 输入包含三个不等式,约束分别是 <=, >=, <=。计算结果显示不等式组不全部成立,最大差值的整数部分是 758。

数据范围

  • 不等式个数:
  • 变量个数:
  • 系数、常数项的绝对值不超过 1000
  • 变量的绝对值不超过 100

题解

模拟

解题思路如下:

  1. 解析输入: 首先,我们需要将输入的字符串分割并转换成适当的数据类型。这包括将系数转换为二维 double 数组,变量转换为一维 int 数组,常数项转换为一维 double 数组,以及将约束符号存储为字符串数组。

  2. 计算每个不等式的左边值: 对于每个不等式,我们需要计算其左边的值。这可以通过将系数与对应的变量相乘并求和来完成。

  3. 判断不等式是否成立: 比较每个不等式的左边值与右边常数项,根据约束符号判断不等式是否成立。如果所有不等式都成立,则输出 true,否则输出 false。

  4. 计算最大差值: 对于每个不等式,计算左边值减去右边常数项的差,并找出最大值。最后取这个最大差值的整数部分(注意不是向下取整)。

关键点:

  • 注意数据类型的转换,特别是在处理 double 类型时要小心精度问题。
  • 在计算最大差值时,要注意不是简单的向下取整,而是取整数部分。这意味着对于负数,我们需要特别处理。

参考代码

  • Python
def solve(coefficients, variables, constants, constraints):
    # 初始化结果
    all_satisfied = True
    max_diff = float('-inf')
    
    # 遍历每个不等式
    for i in range(len(constants)):
        # 计算左边的值
        left_value = sum(coef * var for coef, var in zip(coefficients[i], variables))
        
        # 计算差值
        diff = left_value - constants[i]
        max_diff = max(max_diff, diff)
        
        # 检查不等式是否成立
        if constraints[i] == '<=':
            all_satisfied &= (left_value <= constants[i])
        elif constraints[i] == '>=':
            all_satisfied &= (left_value >= constants[i])
        elif constraints[i] == '<':
            all_satisfied &= (left_value < constants[i])
        elif constraints[i] == '>':
            all_satisfied &= (left_value > constants[i])
        elif constraints[i] == '=':
            all_satisfied &= (abs(left_value - constants[i]) < 1e-9)
    
    # 输出结果
    print('true' if all_satisfied else 'false')
    print(int(max_diff))

# 读取输入
input_str = input().strip()
parts = input_str.split(';')

# 解析系数
coefficients = [list(map(float, part.split(','))) for part in parts[:3]]

# 解析变量
variables = list(map(int, parts[3].split(',')))

# 解析常数项
constants = list(map(float, parts[4].split(',')))

# 解析约束
constraints = parts[5].split(',')

# 调用解决函数
solve(coefficients, variables, constants, constraints)
  • C
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <cmath>
#include <algorithm>

using namespace std;

vector<string> split(const string& s, char delimiter) {
    vector<string> tokens;
    string token;
    istringstream tokenStream(s);
    while (getline(tokenStream, 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

算法刷题笔记 文章被收录于专栏

本专栏收集并整理了一些刷题笔记

全部评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-04 16:28
杭州零跑 slam n*14 硕士985
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务