hdu-6852-构造-Increasing and Decreasing

HDU 6852 Increasing and Decreasing(构造)

菜鸡日记
今天构造的裂开,写了半天,结果T了,难受
ll又忘开了

#include
using namespace std;
typedef long long ll;
const int maxn=2e5+5,inf=0x3f3f3f3f,mod=1e9+7;
int n,x,y,ans[maxn];
ll pre[maxn],len[maxn];
signed main(){
    int _;cin>>_;
    while(_--){
        cin>>n>>x>>y;
        if(1ll*x*y>=n&&x+y<=n+1){
            cout<<"YES"<<endl;
            ll res=n-y;
            for(int i=1;i<x;i++){
                len[i]=res-1ll*(x-1-i)*y;
                if(len[i]<0) len[i]=1;
                res=res-len[i];
                pre[i]=pre[i-1]+len[i];//cout<
            }
            for(int i=1;i<x;i++)
                for(int j=pre[i-1]+1;j<=pre[i];j++){
                    ans[i]=pre[i]-j+pre[i-1]+1;
                    cout<<ans[i]<<" ";
                }
            for(int i=n;i>n-y;i--) cout<<i<<(i==n-y+1?'\n':' ');
        }else cout<<"NO"<<endl;
    }
    return 0;
}

你可能感兴趣的:(acm,C++,hdu,acm竞赛,c++)