倒推数组 新手题
My Solution
为了字典序最小,前面保持1、2、3、4、5、6……n-1,只相应的变化a[n-1]的值
#include
#include
using namespace std;
const int maxn=128;
int ans[maxn],fmin=0;//fmin记得要初始化的
void firstans(const int &n)
{
for(int i=1;i<=n;i++){
ans[i]=i;
}
}
//F=(n+n-1)a1+(n-1+n-2)a2······2a(n-1)+an; 故要字典序最小,只要改变最后一项就好了,而且刚好最后一项系数为1,
//这里就这么搞算数了
void sum(const int &n)
{
for (int i = 1; i <= n; ++i){
for ( int j = 1; j <= n ; ++j)
fmin = fmin + min (ans[i], ans[j]);
}
}
int main()
{
int n,F,T,err=-1;
scanf("%d",&T);
while(T--){
fmin=0; //记得重置
scanf("%d%d",&n,&F);
firstans(n);
sum(n);
if(F<fmin) {printf("%dn",err);continue;}
else {
ans[n]=n+F-fmin;
for(int i=1;i<n;i++)
printf("%d ",ans[i]);
printf("%dn",ans[n]);//最后一个后面不能有空格而是直接换行
}
}
return 0;
}
- THE END -
最后修改:2024年11月16日
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
如经许可后转载,请注明出处:https://prolightsfxjh.com/article/uestc-759/
共有 0 条评论