程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ZOJ3675:Trim the Nails

ZOJ3675:Trim the Nails

編輯:C++入門知識

Robert is clipping his fingernails. But the nail clipper is old and the edge of the nail clipper is potholed.

The nail clipper's edge is N millimeters wide. And we use N characters('.' or '*') to represent the potholed nail clipper. '.' represents 1 bad millimeter edge, and '*' represents 1 good millimeter edge.(eg. "*****" is a 5 millimeters nail clipper with the whole edge good. "***..." is a 6 millimeters nail clipper with half of its edge good and half of its edge bad.)

Notice Robert can turn over the clipper. Turning over a "**...*"-nail clipper will make a "*...**"-nail clipper.

One-millimeter good edge will cut down Robert's one-millimeter fingernail. But bad one will not. It will keep the one-millimeter unclipped.

Robert's fingernail is M millimeters wide. How many times at least should Robert cut his fingernail?

Input

There will be multiple test cases(about 15). Please process to the end of input.

First line contains one integer N.(1≤N≤10)

Second line contains N characters only consists of '.' and '*'.

Third line contains one integer M.(1≤M≤20)

Output

One line for each case containing only one integer which is the least number of cuts. If Robert cannot clipper his fingernail then output -1.

Sample Input

8
****..**
4
6
*..***
7

Sample Output

1
2

Hint

We use '-' to present the fingernail.
For sample 1:
fingernail:	----
nail clipper:	****..**
Requires one cut.

For sample 2:
fingernail:			-------
nail clipper:			*..***
nail clipper turned over:	 ***..*
Requires two cuts.


輸出剪指甲的最小步數

#include 
#include 
#include 
#include 
using namespace std;

int n,m,right,left,minn;
char str[20];
int clp[20];

void dfs(int fig[],int s,int flag,int step)
{
    int i,j,k,tem[50];
    if(step>=minn) return ;
    if(flag)
    {
        for(i = 0; i<=25; i++)
            tem[i] = fig[i];
        for(i = s,j = left; i<=m && j<=n; i++,j++)
        {
            if(!tem[i])
                tem[i] = clp[j];
        }
        for(i = s; i<=m; i++)
        {
            if(!tem[i])
            {
                s = i;
                break;
            }
        }
        if(i == m+1)
        {
            if(step=1; i++,j--)
        {
            if(!tem[i])
                tem[i] = clp[j];
        }
        for(i = s; i<=m; i++)
        {
            if(!tem[i])
            {
                s = i;
                break;
            }
        }
        if(i == m+1)
        {
            if(step=1; i--)
            if(clp[i])
            {
                right = i;
                break;
            }
        scanf("%d",&m);
        if(left==0)
        {
            printf("-1\n");
            continue;
        }
        minn = 999999999;
        memset(fig,0,sizeof(fig));
        dfs(fig,1,1,1);
        dfs(fig,1,0,1);
        printf("%d\n",minn);
    }

    return 0;
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved