1. 程式人生 > >1521 一維戰艦

1521 一維戰艦

return .com max ems 一次 names cnblogs size right

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 一維戰艦