链接:
https://codeforces.com/problemset/problem/1409/C
题意:
给定了数列长度n,数列中第i,j 位的ai和aj,已经保证i<j且ai<aj(i,j不是给定数)
要求找出符合下列条件:
- an(n为如何合法数字)都大于0
- 整个数列为等差数列
其中数列内最大值要求尽可能小,即max(a1…an)最小时的数列
输入
5
2 1 49
5 20 50
6 20 50
5 3 8
9 13 22
输出量
1 49
20 40 30 50 10
26 32 20 38 44 50
8 23 18 13 3
1 10 13 4 19 22 25 16 7
解:
要让等差数列第n个最小,即要让结果靠近aj,如果a1大于0,且d合适,max(an)=aj
a1<0时,max(an)=aj+(合适数量)x*d,x能使a1>0
同时要让d尽可能小,使j和i差距尽可能大
实际代码:
#include<iostream>
using namespace std;
int main()
{
int T;
cin>>T;
for(int f=1;f<=T;f++)
{
int n,x,y;
cin>>n>>x>>y;
if(n==2) cout<<x<<" "<<y<<endl;
else
{
int temp=y-x;
int d=0;
for(int i=n-1;i>=1;i--)
{
if(temp%i==0)
{
d=temp/i;
break;
}
}
//cout<<"D"<<d<<endl;
int a1=y%d;
if((y/d)>(n-1))
{
a1=y-(n-1)*d;
}
if(a1==0) a1+=d;
for(int i=1;i<=n;i++)
{
if(i==1) cout<<a1;
else cout<<" "<<a1+(i-1)*d;
}
cout<<endl;
}
}
}
限制:
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output