1521 一维战舰
Posted Kiven#5197
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1521 一维战舰相关的知识,希望对你有一定的参考价值。
对于n个格子,可放置战舰个数为(n+1)/(a+1),当我们指定一个点时,则减少(right-left)/(a+1)-(x-left)/(a+1)-(right-x)/(a+1)。
每做一次指定点,就做一次减法运算,直至总个数<k或指定m次完毕。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 const int MAX=2e5+10; 5 int vis[MAX]; 6 7 int main(){ 8 int n,k,a,m,x; 9 cin>>n>>k>>a>>m; 10 int flag=-1; 11 int left,right; 12 memset(vis,0,sizeof(vis)); 13 int num=(n+1)/(a+1); 14 for(int i=0;i<m;i++){ 15 cin>>x; 16 vis[x]=1; 17 for(left=x-1;left>0&&vis[left]==0;left--); 18 for(right=x+1;right<=n&&vis[right]==0;right++); 19 num-=(right-left)/(a+1)-(x-left)/(a+1)-(right-x)/(a+1); 20 if(num<k&&flag==-1){ 21 flag=i+1; 22 break; 23 } 24 } 25 cout<<flag<<endl; 26 return 0; 27 }
以上是关于1521 一维战舰的主要内容,如果未能解决你的问题,请参考以下文章
51 nod 1521 一维战舰 时间复杂度O(n),同 Codeforces 567D. One-Dimensional Battle Ships 有详细注释