题意:收到礼物的规则为每个假日必收到一份礼物,每K天里至少收到一份礼物,求出N天中收到的礼物的最小数量。
思路:将N天根据假日所在天数分为一段段,当假日与假日之间间隔天数hol[i]>-hol[i-1]-1>=k时,这段间隔内还至少收到(hol[i]>-hol[i-1]-1)/k份礼物。注意第一个假日与第一天求解,最后一个假日与最后一天求解。
#include<iostream> #include<cstring> int hol[400]; using namespace std; int main() { int n,k,c; while(cin>>n>>k) { memset(hol,0,sizeof(hol)); cin>>c; int sum=0; sum+=c; if(c!=0) { cin>>hol[0]; if(hol[0]-1>=k) { sum+=(hol[0]-1)/k; } for(int i=1;i<c;i++) { cin>>hol[i]; if(hol[i]-hol[i-1]-1>=k) { sum+=(hol[i]-hol[i-1]-1)/k; } } if(n-hol[c-1]>=k) { sum+=(n-hol[c-1])/k; } } else //没有假日的情况 { sum+=n/k; } cout<<sum<<endl; } return 0; }