萌新刚学OI,求助一道大模拟水题
  • 板块灌水区
  • 楼主Forza_Juventus
  • 当前回复11
  • 已保存回复11
  • 发布时间2020/10/1 18:46
  • 上次更新2023/11/5 12:18:31
查看原帖
萌新刚学OI,求助一道大模拟水题
209812
Forza_Juventus楼主2020/10/1 18:46

RTRT

题目描述

有一个数组a[1..n]a[1..n],但是这个数组的内容丢失了,你要尝试恢复它。已知以下的三个事实:

1、对于1<=i<=n1<=i<=n,都有a[i]>0a[i]>0,且所有的a[i]a[i]互不相同。即a数组保存的全部都是正整数,且互不相同。

2、xxyy一定是属于数组aa,且x<yx<y

3、数组aa是等差数列。

容易发现,同时满足上面三个条件的aa数组不一定是唯一的。你要输出使得a[n]a[n]的值最小的那个a数组,如果a[n]a[n]依然相同,输出a[1]a[1]最小的。

输入

多组测试数据。

第一行,一个整数T,表示有T组测试数据。1<=T<=100。

接下来有T行,每行3个整数:n,x,y。2<=n<=50。1<=x,y<=50。

输出

共T行,每行n个整数

本人代码如下:

#include <bits/stdc++.h>
using namespace std;
int t,n,x,y,minr = 0x3f3f3f3f,minf = 0x3f3f3f3f,amns;//最大的最后一项,最小的第一项,以及公差
int main()
{
    cin>>t;
    for(int k = 1;k <= t;k ++)
    {
        cin>>n>>x>>y;
        if(n == 2)
        {
            cout<<x<<' '<<y<<endl;
            continue;
        }
        if(y - x == n)//如果[x,y]正好有n+1项
        {
            int mns = y - x;
            int start = x;
            while(start - mns > 0)
            {
                start -= mns;
            }
            for(int i = 0;i < n;i ++)
            {
                cout<<start + i * mns<<' ';
            }
            cout<<endl;
            continue;
        }
        int tms = y - x;
        for(int i = 1;i <= tms;i ++)
        {
            if(tms % i == 0)
            {
                if(tms / i + 1> n) continue;
                int mns = tms / i,j = 0;
                while(x + j * mns <= y) j ++; //计算[x,y]里面有多少项
                j ++;
                int res = n - j;//还剩多少项没有分配
                int start = x;
                while(start - mns > 0 && res != 0) start -= mns,res --;//尽量使第一项小
                int r = start + (n - 1) * mns;
                if(r < minr) minf = start,minr = r,amns = mns;
                if(r == minr) 
                    if(start < minf)
                        minf = start,minr = r,amns = mns;
            }
        }
        for(int i = 0;i < n;i ++)
        {
            cout<<minf + i * amns<<' ';
        }
        cout<<endl;
    }
}

或者可以在云剪贴板看(T5T5)

2020/10/1 18:46
加载中...