小B研究包含「.」和ASCII碼的字符串。
目標是消除字符串中連續出現的「.」。
假定,一次能夠用一個「.」置換連續的兩個「.」。
問,對於任一字符串,在通過某些字符置換後,最少須要幾回置換,來消除全部的連續「.」。ios
輸入:第一行是兩個整數n和m,n是字符串長度(1<=n,m<=10000).第二行是字符串。接下來是m行的置換信息:每一行是整數x和字符c。
輸出:對應於輸入的m行的置換結果,輸出所需的最小置換次數。spa
樣例輸入:
10 3
.b..bc....
1 g
3 k
9 u
4 4
.bc.
2 .
3 .
2 b
1 d
樣例輸出:
4
3
1
1
3
1
1code
如下是我寫的代碼。請多指教。ci
#include<iostream> using namespace std; int fun(char *s,int n){ int len=0; int *t; t= (int *)malloc(n*sizeof(int)); for(int i=0;i<n;i++){ t[i]=0; if((s[i]=='.')&&(i>0)){ t[i]=t[i-1]+1; } } for(int i=0;i<n;i++) if((t[i]>0)&&(t[i+1]==0)) len+=t[i]; return len; } int main(){ cout<<fun(".b..bz....",10)<<endl; int n,m; while(cin>>n>>m){ char * s; s=(char *)malloc(n*sizeof(char)); cin>>s; //for(int i=0;i<n;i++)cin>>s[i]; for(int i=0;i<m;i++){ int x; char c; cin>>x>>c; s[x-1]=c; int f=fun(s,n); cout<<f<<endl; } } return 0; }