数学]文字列[2017年7月7日人気

タイトル説明

可能な限り、数が0に等しく、1が含まれる0-1の文字列が与えられると、サブストリングを見つけます。

入力
のみ01を含む文字列ではなく、より多くの1,000,000以上の長さを。

出力
ライン整数は0に等しく、長さ1のサブストリングの最大数。

サンプル入力
1011

サンプル出力
2

データ範囲の制限
データ列の長さの30%<20


思考

質問は食べるのが難しい結果と、とても快適だった直面しています。私は言いませんでした

30:暴力
60ポイント:接頭辞。しかし、私は、70ポイント少し巧妙なものを使用し、実際の結果への暴露などを(

100ポイント

プレフィックスとプレフィックス0は、2つのポイント1との間の差に等しくなるように、それは、数学の問題が考慮されるべきである、2つの系列の間の01ポイントが正当なものです。ただ、自分自身にいくつかの栗の十分を与えます。貧しいレコードプレフィックスとプレフィックス0 1が最も再び表示されるようになった場合は答えを更新し、違いを発見しました。


#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
const int M=1000000;//要加 M是因为0和1的差可能是负数
long long Gun,a,f[2000100];
string s;
int main(){
	freopen("string.in","r",stdin);
	freopen("string.out","w",stdout);
	cin>>s;
	for(int i=0;i<s.size();i++){
		if(s[i]=='0')a++;
		   else a--;
		if(a==0&&i+1>Gun)Gun=i+1;
		if(f[a+M]==0)f[a+M]=i+1;//记录差的初始位置
		   else
		Gun=max(Gun,i+1-f[a+M]);
	}
	printf("%lld",Gun);
}
公開された45元の記事 ウォンの賞賛0 ビュー378

おすすめ

転載: blog.csdn.net/qq_39940018/article/details/102750243
おすすめ