线性插值

#include<iostream>
#include<set>
using namespace std;

struct Data
{
    int index;
    int value;
};

struct myComp
{
    bool operator()(const Data &a, const Data &b)
    {
        return a.index < b.index;
    }
};
int main()
{
    set<Data, myComp> dataset;

    int m,n;
    cin>>m>>n;



    for(int i=0; i<m; i++)
    {
        int idx;
        int dt;

        cin>>idx;
        cin>>dt;

        if(dataset.empty())
        {
            Data tmp;
            tmp.index = idx;
            tmp.value = dt;
            dataset.insert(tmp);
        }
        else
        {
            Data last = *(--dataset.end());

            if(idx > last.index)
            {
                for(int i=1; i<=(idx-last.index); i++)
                {
                    Data tmp;
                    tmp.index = i+last.index;
                    tmp.value = last.value + (dt-last.value)*i/(idx-last.index);
                    dataset.insert(tmp);
                }
            }
        }
    }

    for(set<Data>::iterator itr=dataset.begin(); itr!=dataset.end(); itr++)
    {
        cout<<(*itr).index<<' '<<(*itr).value<<endl;
    }



    return 0;
}

  

原文地址:https://www.cnblogs.com/hardsoftware/p/6233576.html