POJ3320尺取法

原创 2016年08月30日 20:22:34

n个数,求最小区间覆盖着n个数中所有的不相同的数字。

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) {
		new POJ3320().solve();
	}
}

class POJ3320 {
	InputReader in = new InputReader(System.in);
	PrintWriter out = new PrintWriter(System.out);
	final int N = 1000008 ;
	int[] a = new int[N] ;
	Set<Integer> set = new HashSet<Integer>() ;
	Map<Integer , Integer> map = new HashMap<Integer, Integer>() ;
	
	void solve() {
		int n = in.nextInt() , size = 0 ;
		set.clear() ;
		map.clear() ; 
		for(int i = 0 ; i < n ; i++){
		    set.add(a[i] = in.nextInt() ) ;
		}
		size = set.size() ;
		
		int start = 0 , end = 0 , sum = 0 ;
		int res = n ; 
		for(;;){
			while(end < n && sum < size){
				Integer cnt = map.get(a[end]) ;
				if(cnt == null){
					sum++ ;
				    map.put(a[end] , 1) ;
				}
				else map.put(a[end] , cnt+1) ;
				end++ ;
			}
			if(sum < size) break ; 
			res = Math.min(end - start , res) ;
			int cnt = map.get(a[start]) ; 
			if(cnt == 1){
				map.remove(a[start]) ;
			    sum-- ;
			}
			else map.put(a[start] , cnt-1) ;
			start++ ;
		}
		out.println(res) ;
		out.flush() ;
	}
}

class InputReader {
	public BufferedReader reader;
	public StringTokenizer tokenizer;

	public InputReader(InputStream stream) {
		reader = new BufferedReader(new InputStreamReader(stream), 32768);
		tokenizer = new StringTokenizer("");
	}

	private void eat(String s) {
		tokenizer = new StringTokenizer(s);
	}

	public String nextLine() {
		try {
			return reader.readLine();
		} catch (Exception e) {
			return null;
		}
	}

	public boolean hasNext() {
		while (!tokenizer.hasMoreTokens()) {
			String s = nextLine();
			if (s == null)
				return false;
			eat(s);
		}
		return true;
	}

	public String next() {
		hasNext();
		return tokenizer.nextToken();
	}

	public int nextInt() {
		return Integer.parseInt(next());
	}

	public long nextLong() {
		return Long.parseLong(next());
	}

	public double nextDouble() {
		return Double.parseDouble(next());
	}

	public BigInteger nextBigInteger() {
		return new BigInteger(next());
	}

}


版权声明:本文为博主原创文章,未经博主允许不得转载。

POJ_3061 && POJ_3320 (尺取法)

题意1:给定长度为n的数列整数A0,A1,A2……An-1以及整数S。求出总和不小于S的连续子序列的长度的最小值。如果解不存在,则输出0。 题意2:为了准备考试,Jessica开始读一本很厚的课本。要...
  • jhgkjhg_ugtdk77
  • jhgkjhg_ugtdk77
  • 2015年05月27日 21:31
  • 877

poj3320 尺取法

如题:http://poj.org/problem?id=3320   Jessica's Reading Problem Time Limit: 1000MS   Memo...
  • Twenty_seven
  • Twenty_seven
  • 2015年03月06日 16:53
  • 178

poj3320 尺取法~~

Jessica's Reading Problem Time Limit: 1000MS   Memory Limit: 65536K Total Submission...
  • liyunlong41
  • liyunlong41
  • 2015年09月28日 20:00
  • 194

poj3320尺取法

这道意思是一本书有n页,每一页上有一个知识点标号a[i]可能重复,要求选择一个最小的区间使得能够覆盖所有知识点分析:[l,r]区间推进,统计区间中能够覆盖的知识点数,对于每一个l,r都是满足可以覆盖所...
  • aonaigayiximasi
  • aonaigayiximasi
  • 2016年08月09日 21:30
  • 132

尺取法--poj3320

Language: Default Jessica's Reading Problem Time Limit: 1000MS   Memory Limit: 65536K...
  • u010660276
  • u010660276
  • 2013年09月20日 19:40
  • 1223

尺取法+POJ3320

Jessica's a very lovely girl wooed by lots of boys. Recently she has a problem. The final exam is co...
  • qq_34649947
  • qq_34649947
  • 2017年05月12日 21:26
  • 78

POJ3320 尺取法

Jessica's a very lovely girl wooed by lots of boys. Recently she has a problem. The final exam is co...
  • FrankAx
  • FrankAx
  • 2017年08月01日 20:17
  • 77

POJ3320尺取法

Jessica's Reading Problem Time Limit: 1000MS   Memory Limit: 65536K Total Submission...
  • zcj5027
  • zcj5027
  • 2016年02月10日 14:06
  • 202

poj3320 尺取法 <挑战程序设计竞赛>

2018-2-7 与poj3061类似,直接使用尺取法即可,这里使用STL里面的map求解更为方便,可以直接得到每个知识点出现的次数,继而便于进行加一减一操作。 #include #include...
  • qq_34600424
  • qq_34600424
  • 2018年02月07日 17:38
  • 7

尺取法 poj3061 poj3320

http://poj.org/problem?id=3061 /* (1).s=t=sum=0初始化 (2).只要sum=S则无解。有解则res=min(res,t-s); (4).sum减去序...
  • hnust_taoshiqian
  • hnust_taoshiqian
  • 2015年06月20日 18:13
  • 243
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ3320尺取法
举报原因:
原因补充:

(最多只允许输入30个字)