Mam do zrobienia zadanie, w którym dla podanej sekwencji znaków oraz liczby całkowitej (liczba ta oznacza ilosć siatek maskujących) należy określić jaka długość ma być takich samych, najmniejszych powierzchni siatek maskujących pokrywających te znaki,
np:
&-znak, '.' -puste pole
&&..&&&.&&
3
to będzie 3 bo |&&.|.|&&&||.&&|
Wiem,że należy użyć metody dziel & zwyciężaj, ale nie do końca mi to wychodzi, ma ktoś jakiś pomysł?
Tyle na razie napisałem, ale to srednio działa.
#include <iostream>
using namespace std;
void CoverIt(int n,char a[],int m)
{
int maxV=n,minV=0,s=n,j=0;
do
{
j=0;
s=(minV+maxV)/2;
for(int i=0;i<n;i++)
{
if(a[i]=='&')
{
cout<<i<<endl;
i+=s-1;
j++;
}
}
if(j==0)
{
minV=maxV=0;
}
else if(j==m)
{
maxV=s;
}
else if(j>m)
{
minV=s+1;
}
else if(j<m)
{
maxV=s-1;
}
}
while(minV!=maxV);
cout<<maxV;
}
int main()
{
int n,m;
char a[1000];
cin>>n;
cin>>m;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
CoverIt(n,a,m);
return 0;
}