1521 一維戰艦
阿新 • • 發佈:2017-07-22
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--); 18for(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 return0; 27 }
1521 一維戰艦