zoukankan      html  css  js  c++  java
  • 【Codeforces 466C】Number of Ways

    【链接】 我是链接,点我呀:)
    【题意】

    让你把数组分成3个连续的部分 每个部分的和要一样 问你有多少种分法

    【题解】

    先处理出来num[i] 表示i..n这里面有多少个j 满足aft[j] = aft[i]/2 这aft[i]=a[j]+a[j+1]..+a[n] 然后for从1..n 看看pre[i]*2=aft[i+1]是否成立。 如果成立的话那么答案就加上num[i+1]

    【代码】

    import java.io.*;
    import java.util.*;
    
    
    public class Main {
    	
    	static int N = (int)5e5;
    	static InputReader in;
    	static PrintWriter out;
    		
    	public static void main(String[] args) throws IOException{
    		in = new InputReader();
    		out = new PrintWriter(System.out);
    		//code start from here
    		new Task().solve(in, out);
    		out.close();
    	}
    	
    	static class Task{
    		public void solve(InputReader in,PrintWriter out) {
    			int n = in.nextInt();
    			int []a = new int[N+10];
    			long []pre = new long[N+10];
    			long []aft = new long[N+10];
    			int []num = new int[N+10];
    			for (int i = 1;i <= n;i++) a[i] = in.nextInt();
    			for (int i = 1;i <= n;i++) pre[i] = pre[i-1]+a[i];
    			for (int i = n;i >= 1;i--) aft[i] = aft[i+1]+a[i];
    			Hashtable<Long, Integer> dic = new Hashtable<Long,Integer>();
    			for (int i = n;i >= 1;i--) {
    				if (aft[i]%2==0) {
    					long temp = aft[i]/2;
    					if (dic.get(temp)!=null)
    						num[i] = dic.get(temp);
    				}
    				Integer temp1 = dic.get(aft[i]);
    				if (temp1==null) {
    					dic.put( aft[i], 1);
    				}else {
    					dic.put(aft[i], temp1+1);
    				}
    			}
    			long ans = 0;
    			for (int i = 1;i <=n;i++) {
    				long cur = pre[i];
    				cur = pre[n]-cur;
    				if (cur!=pre[i]*2) {
    					continue;
    				}
    				ans = ans + num[i+1];
    			}
    			out.println(ans);
    		}
    	}
    
    	
    
    	static class InputReader{
    		public BufferedReader br;
    		public StringTokenizer tokenizer;
    		
    		public InputReader() {
    			br = new BufferedReader(new InputStreamReader(System.in));
    			tokenizer = null;
    		}
    		
    		public String next(){
    			while (tokenizer==null || !tokenizer.hasMoreTokens()) {
    				try {
    				tokenizer = new StringTokenizer(br.readLine());
    				}catch(IOException e) {
    					throw new RuntimeException(e);
    				}
    			}
    			return tokenizer.nextToken();
    		}
    		
    		public int nextInt() {
    			return Integer.parseInt(next());
    		}
    	}
    }
    
  • 相关阅读:
    我的游戏开发工作生涯要开始了
    关于碰撞检测和物理引擎
    关于havok
    认识多渲染目标(Multiple Render Targets)技术
    无限分级的tree
    运用ThreadLocal解决jdbc事务管理
    盒子模型 计算
    监听域对象
    爱恨原则 就近原则 (LVHA)
    java database connection
  • 原文地址:https://www.cnblogs.com/AWCXV/p/10359024.html
Copyright © 2011-2022 走看看