题解:P17062 [JRKSJ R10 热身赛] Captain
yuyueyuyue · · 题解
题解:P17062 [JRKSJ R10 热身赛] Captain
题目大意
将 N0。
解题思路
这题主要还是思维上的难度,尤其是样例给的非常误导人,本蒟蒻也是陷入其中许久,但跳出样例,自己找出一组解后,就豁然开朗了。
首先,容易想到
在知道了整套流程之后,我们就可以判断 NO 的情况了。为了使每个骰子都至少有一面,那么总面数就是 NO 即可,其他情况按刚才所述流程进行就解决了。
::::success
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int k,n,ans;
bool vis[N];
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>k>>n;
if(n<(k+1)*k/2){
cout<<"NO\n";
return 0;
}
int t=1,last=1;
while(t<k){
cout<<k-t+1<<' ';
vis[n-t+1]=1;
for(int i=0;i<k-t;i++,last++){
cout<<last<<' ';
vis[last]=1;
}
cout<<n-t+1<<' '<<'\n';
t++;
}
cout<<n-k*(k+1)/2+1<<' ';
for(int i=last;i<=n-k+1;i++) cout<<i<<' ';
return 0;
}
::::
小结与反思
这种构造题目,题目所给出的样例经常与正解不一样,导致题目极具误导性,所以不要拘泥于样例的方案中也是一种很好的解题技巧。