2×2 控制分配与等比例限幅
题目
求解 。若 ,输出 SINGULAR;否则按 对两轴共同缩放,零向量时 。不是逐轴裁剪,也不是约束最优分配。
输入
;,矩阵元素绝对值不超过 。
输出
奇异时 SINGULAR;否则缩放后 和缩放比例 。
示例
输入
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;
}