学习笔记搜索

学习笔记 / C++ 练习

延迟观测的时间缓存插值

C++17 · 时间同步 · 缓存 · 25 组测试

题目

对严格递增时间戳缓存做分段线性插值:x(t)=xi+t−titi+1−ti(xi+1−xi).x(t)=x_i+\frac{t-t_i}{t_{i+1}-t_i}(x_{i+1}-x_i). 端点可查询,超出范围输出 OUT,禁止外推。本题只做观测对齐,不等同于完整乱序 Kalman 回滚重放。

回到相关教材 →

输入

N,MN,M;随后 NN 行 t,xt,x;然后 MM 个查询时间。2≤N≤1002\le N\le100,时间严格递增。

输出

每个查询一行:插值值或 OUT。

示例

输入

5 17
0 4.482117543855827
1 5.14174801512263
2 3.586444563099697
4 -6.00496539724935
7 0.46940689223143295
-1 0 0.5 1 3 7 8 4.654154960359032 7.364342451183196 5.9666563355976345 2.7141423791139596 3.630301257255457 4.726626994825972 8.992187208189469 3.0621420149073186 -0.609351789316992 5.505867656189043

期望输出

OUT
4.482117543855827
4.811932779489228
5.14174801512263
-1.2092604170748267
0.46940689223143295
OUT
-4.59321781445771
OUT
-1.760676969874302
0.161628399029198
-4.231999295505086
-4.436814170552693
OUT
-1.507275187443934
OUT
-2.7551161222974456

在线 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);
        int n,m;
        cin>>n>>m;
        vector<double>t(n),x(n);
        for(int i=0;i<n;i++)cin>>t[i]>>x[i];
        while(m--) {
            double q;
            cin>>q;
            if(q<t.front()||q>t.back()) {
                cout<<"OUT\n";
                continue;
            }
            int i=lower_bound(t.begin(),t.end(),q)-t.begin();
            if(i==0) {
                cout<<x[0]<<"\n";
                continue;
            }
            cout<<x[i-1]+(x[i]-x[i-1])*(q-t[i-1])/(t[i]-t[i-1])<<"\n";
        }
    }
    离线命令行练习与报告导入(可选)

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

    查看本地判题结果

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

    ← 返回练习目录