NOJ——1627Alex’s Game(II)(尺取)

  • [1627] Alex’s Game(II)

  • 时间限制: 2000 ms 内存限制: 65535 K
  • 问题描述
  • Alex likes to play with one and zero as you know .

    Today he gets a sequence which contains n(n<=1e5) integers.Each integer is no nore than 100.now he wants to know what’s the minimun contigous subsequence that their puduct contain no less than k(k<=1e5) zeros in the tail.

  • 输入
  • First are two integers n and k.
    Next contains n lines ,every line contains n integers. 
    All integers are bigger than 0.
  • 输出
  • For each case output the answer if you can find it.
    Else just output “haha”
  • 样例输入
  • 5 1
    2 10 2 5 1
    5 3
    2 10 2 5 1
  • 样例输出
  • 1
    haha

刚开始以为K=0的话就直接输出0,后来发现0的情况要特判:若每一个数都末尾带0,即能被10整除,则输出0,否则只要取那个不是10倍数的数即可,输出1.其他情况用尺取法。

统计2与5的个数,只有这两个数可以影响末尾0的个数,每一次加上L或减掉R那边的两个统计个数即可。

代码:

#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<cmath>
#include<queue>
#include<set>
#include<map>
using namespace std;
typedef long long LL;
#define INF 0x3f3f3f3f
int two[100010];
int five[100010];
int pos[100010];
inline int conttwo(int n)
{
	if(n%2!=0)
		return 0;
	else
	{
		int ans=0;
		while (n%2==0)
		{
			ans++;
			n>>=1;
		}
		return ans;
	}
}
inline int contfive(int n)
{
	if(n%5!=0)
		return 0;
	else
	{
		int ans=0;
		while (n%5==0)
		{
			ans++;
			n/=5;
		}
		return ans;
	}
}
int main(void)
{
	int n,k,dx,ans,i,j,t;
	while (~scanf("%d%d",&n,&k))
	{
		memset(two,0,sizeof(two));
		memset(five,0,sizeof(five));
		for (i=1; i<=n; i++)
		{
			scanf("%d",&pos[i]);
			two[i]=conttwo(pos[i]);
			five[i]=contfive(pos[i]);
		}
		if(k<=0)//特判0
		{
			bool flag=0;
			for (i=1; i<=n; i++)
			{
				if(pos[i]%10!=0)
				{
					flag=1;
					break;
				}
			}
			if(flag)
				printf("%d\n",1);
			else
				printf("%d\n",0);
			continue;
		}
		int l=1,r=1,dx=INF;
		int sum5=0,sum2=0;
		while (1)
		{
			while (r<=n&&min(sum5,sum2)<k)
			{
				sum5+=five[r];
				sum2+=two[r];
				r++;
			}
			if(min(sum5,sum2)<k)
				break;
			dx=min(dx,r-l);
			sum5-=five[l];
			sum2-=two[l];
			l++;
		}
		if(dx==INF)
			printf("haha\n");
		else
			printf("%d\n",dx);
	}
	return 0;
}

  

时间: 2024-08-29 07:45:41

NOJ——1627Alex’s Game(II)(尺取)的相关文章

NOJ 1072 The longest same color grid(尺取)

Problem 1072: The longest same color grid Time Limits:  1000 MS   Memory Limits:  65536 KB 64-bit interger IO format:  %lld   Java class name:  Main Description There are n grid, m kind of color. Grid number 1 to N, color number 1 to M.  The color of

Codeforces Round #116 (Div. 2, ACM-ICPC Rules) E. Cubes (尺取)

题目链接:http://codeforces.com/problemset/problem/180/E 给你n个数,每个数代表一种颜色,给你1到m的m种颜色.最多可以删k个数,问你最长连续相同颜色的序列的长度是多少. 将相同颜色的下标存到对应颜色的容器中,比如ans[a[i]].push_back(i)就是将下标为i颜色为a[i]的数存到ans[a[i]]容器中. 对于每种颜色序列,尺取一下 在差距小于k的情况下取能取到的最大长度. 1 //#pragma comment(linker, "/S

POJ3061 Subsequence 尺取or二分

Description A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, and a positive integer S (S < 100 000 000) are given. Write a program to find the minimal length of the subsequence of consecutive elements o

POJ3320 Jessica&#39;s Reading Problem(尺取+map+set)

POJ3320 Jessica's Reading Problem set用来统计所有不重复的知识点的数,map用来维护区间[s,t]上每个知识点出现的次数,此题很好的体现了map的灵活应用 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <queue> #include <vector> #include &

hdu 4123 Bob’s Race 树的直径+rmq+尺取

Bob’s Race Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description Bob wants to hold a race to encourage people to do sports. He has got trouble in choosing the route. There are N houses and N - 1 roads

poj2566尺取变形

Signals of most probably extra-terrestrial origin have been received and digitalized by The Aeronautic and Space Administration (that must be going through a defiant phase: "But I want to use feet, not meters!"). Each signal seems to come in two

POJ 3061 Subsequence 尺取

Subsequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14698   Accepted: 6205 Description A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, and a positive integer S (S < 100 000 000) ar

【尺取】HDU String

http://acm.hdu.edu.cn/showproblem.php?pid=5672 [题意] 给定一个小写英语字母组成的字符串,求这个字符串一共包含多少个至少有m个不同字母的连续子序列 [思路] 尺取. 我们发现,如果i~j是恰好含有k个字母的区间,那么对于k(j<k<=n),i~k是含有至少k个不同字母的子串,那么对于每一个左边界,我们都可以找到一个最小的右边界,使得这个区间恰好含有k个字母,然后统计以这个左边界符合条件的子串个数,找到右边界,用尺取法即可. [Accepted]

【尺取】HDU Problem Killer

acm.hdu.edu.cn/showproblem.php?pid=5328 [题意] 给定一个长度为n的正整数序列,选出一个连续子序列,这个子序列是等差数列或者等比数列,问这样的连续子序列最长是多少? [思路] 尺取,用来解决这样的问题:需要在给的一组数据中找到不大于某一个上限的"最优连续子序列" 分别用双指针找最长的等差数列和等比数列,找最大值就可以了. 注意a 或者 a b既是等差数列,又是等比数列. [Accepted] 1 #include <iostream>