题目描述:
给你一些不同页数的数并且其中有待删除的数, 每次能删除该页的要删除的数并且该页删除完毕后 ,后面的值可以向前靠,问需要删几次;
(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; }