贪心硬币

贪心硬币

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=1e6+10;

int pos[2*maxn];
char str[maxn];
int main()
{
	int text=0;
		while(~scanf("%s",str+1))
		{int cnt1=0,cnt0=0,ans=0;
			for(int i=1;str[i];i++)
			{
				if(str[i]=='1')
				{
					cnt1++;   //1的个数 
				}
				else
				cnt0++;
				
				int k=cnt1-cnt0+maxn;//为了temp不取负数,加上100000 
				if(pos[k]||cnt1==cnt0)
				{
					ans=max(ans,i-pos[k]);//如果之前的temp差值有数的话,那么就更新新的,或者
											//1和0的个数相等 那么就是当前位置是最大的 
				}
				
				else
				{
					pos[k]=i;     //如果都不满足的话更新temp 
				}
				
			}
			
			printf("%d %d
",++text,ans);
		}
	
 } 
原文地址:https://www.cnblogs.com/shenxiaodou/p/12468651.html