题目描述:
给你一些不同页数的数并且其中有待删除的数, 每次能删除该页的要删除的数并且该页删除完毕后 ,后面的值可以向前靠,问需要删几次;
(1≤n≤10^18, 1≤m≤10^5, 1≤m,k≤n) (k表示一页有多少个数,m表示要删除数的个数)
这里注意下周期问题 也就是(n-1)/k 比较是否在同一个周期内;
ac代码
#include<bits/stdc++.h>
using namespace std;
const int mod=1e6+3;
long long a[100008];
int main(){
long long k,n;
int m;
cin>>n>>m>>k;
int k1=0,k2=1;
for(int i=1;i<=m;i++)
scanf("%I64d",&a[i]);
int ans=0;
for(int i=2;i<=m;i++){
if((a[i]-k1-1)/(k)==(a[i-1]-k1-1)/(k)){
k2++;
}
else {
k1=k1+k2;
k2=1;
ans++;
}
}
ans++;
cout<<ans<<endl;
}

京公网安备 11010502036488号