学习笔记搜索

学习笔记 / C++ 练习

2×2 控制分配与等比例限幅

C++17 · 控制分配 · 线性代数 · 28 组测试

题目

求解 Au=bA\mathbf u=\mathbf b。若 ∣det⁡A∣<10−10|\det A|<10^{-10},输出 SINGULAR;否则按 s=min⁡(1,Lmax⁡(∣u0∣,∣u1∣))s=\min\left(1,\frac{L}{\max(|u_0|,|u_1|)}\right) 对两轴共同缩放,零向量时 s=1s=1。不是逐轴裁剪,也不是约束最优分配。

回到相关教材 →

输入

a00,a01,a10,a11,b0,b1,La_{00},a_{01},a_{10},a_{11},b_0,b_1,L;L>0L>0,矩阵元素绝对值不超过 1010。

输出

奇异时 SINGULAR;否则缩放后 su0,su1su_0,su_1 和缩放比例 ss。

示例

输入

1 2 2 4 -5.390219970882908 -1.684722592810271 2

期望输出

SINGULAR

在线 C++17 练习

在浏览器编译运行,代码不上传;首次下载约 28 MB。

尚未运行

    运行环境

    Clang 22 / C++17 / WASI,支持本题所需标准库;不支持线程、C++ 异常或任意宿主系统访问。每例 2 秒、256 MiB 线性内存、64 KiB 输出;编译器另占浏览器内存,不适合低内存设备。初次加载最多等待 120 秒,可随时停止。

    草稿保存在本浏览器。测试公开,属于本地自测而非防作弊竞赛判题;参考解答不参与运行。所有运行资产均由本站提供。

    编译器来源与开源许可
    参考实现(完成后再展开)

    对照自己的推导,检查状态更新顺序、边界条件与单位,而不只比较最终输出。

    #include <iostream>
    #include <iomanip>
    #include <cmath>
    #include <algorithm>
    #include <vector>
    #include <array>
    #include <queue>
    #include <tuple>
    #include <limits>
    using namespace std;
    
    // Reference implementation: optional; solve the starter before opening.
    int main() {
        cout << setprecision(17);
        double a,b,c,d,x,y,L;
        cin>>a>>b>>c>>d>>x>>y>>L;
        double det=a*d-b*c;
        if(abs(det)<1e-10) {
            cout<<"SINGULAR";
            return 0;
        }
        double u=(d*x-b*y)/det,v=(-c*x+a*y)/det,m=max(abs(u),abs(v)),s=m==0?1:min(1.0,L/m);
        cout<<u*s<<" "<<v*s<<" "<<s;
    }
    离线命令行练习与报告导入(可选)

    也可使用包内 practice/README.md 的 C++17 命令行流程。

    查看本地判题结果

    选取判题器生成的 JSON 报告,逐项查看结果。文件只在浏览器内读取。

    ← 返回练习目录