P10872 [COTS 2022] 移位 Maliand
P10872 [COTS 2022] 移位 Maliand
考虑 S,TS, T 的每个位置只会相匹配 1 次,共匹配 NN 次,产生贡献的有 K⋅LK\cdot L 次,
所以想要所有匹配中贡献最大的最小,平均分配即可,答案就应该是 ⌈KLN⌉\lceil \frac{KL}{N} \rceil。
先考虑 SS,1 是可以随便放的,为了方便,可以前 KK 个都放 1。
再考虑 TT,为了使每 KK 个都有平均数量的 1,我们直接循环区间放 1 即可。
代码:
#include
using namespace std;
#define int long long
const int N=5e5+5;
int n,k,l;
int ans[N];
signed main(){
cin>>n>>k>>l;
cout
`#include
using namespace std;
#define int long long
const int N=5e5+5;
int n,k,l;
int ans[N];
signed main(){
cin>>n>>k>>l;
coutceil(1.0*k*l/(1.0*n))"\n";
for(int i=1;i
cout"\n";
int i=0;
while(l--){
while(ans[i]) (i+=1)%=n;
ans[i]=1;
(i+=k)%=n;
}
for(int i=0;ians[i];
return 0;
}`