hdu4810组合数学
2015-07-15 22:21
288 查看
import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.StreamTokenizer; import java.math.BigInteger; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.LinkedList; import java.util.PriorityQueue; import java.util.Queue; import java.util.Scanner; import java.util.Stack; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException{ StreamTokenizer cin = new StreamTokenizer(new BufferedInputStream(System.in)); InputReader in = new InputReader(System.in) ; PrintWriter out = new PrintWriter(System.out) ; while(cin.nextToken() != cin.TT_EOF){ int n = (int)cin.nval ; new Task().solve(n, cin, out) ; // out.flush(); } out.flush() ; } } class Task{ static long[][] C = new long[1001][1001] ; static long[] pow2 = new long[32] ; static long mod = 1000003L ; static{ C[0][0] = C[1][0] = C[1][1] = 1L ; for(int i = 2 ; i <= 1000 ; i++){ C[i][0] = C[i][i] = 1L ; for(int j = 1 ; j < i ; j++){ C[i][j] = C[i-1][j-1] + C[i-1][j] ; if(C[i][j] >= mod) C[i][j] %= mod ; } } for(int i = 0 ; i <= 31 ; i++) pow2[i] = (1L<<i) % mod ; } int[] bit = new int[32] ; long[] res ; int n ; public void solve(int n , StreamTokenizer cin , PrintWriter out) throws IOException{ res = new long[n+1] ; Arrays.fill(bit, 0) ; for(int i = 1 ; i <= n ; i++){ cin.nextToken() ; int a = (int)cin.nval ; for(int j = 0 ; j <= 31 ; j++){ if(((1<<j) & a) > 0) bit[j]++ ; } } Arrays.fill(res, 0) ; for(int i = 1 ; i <= n ; i++){ for(int b = 0 ; b <= 31 ; b++){ for(int k = 1 ; k <= i && k <= bit[b] ; k += 2){ res[i] += pow2[b] * C[bit[b]][k] % mod * C[n-bit[b]][i-k] % mod ; res[i] %= mod ; } } } out.print(res[1]) ; for(int i = 2 ; i <= n ; i++) out.print(" " + res[i]) ; out.println(); } } class InputReader{ public BufferedReader reader; public StringTokenizer tokenizer; public InputReader(InputStream stream){ reader = new BufferedReader(new InputStreamReader(stream), 32768); tokenizer = null; } public String next(){ while(tokenizer == null || !tokenizer.hasMoreTokens()){ try{ tokenizer = new StringTokenizer(reader.readLine()); }catch (IOException e) { throw new RuntimeException(e); } } return tokenizer.nextToken(); } public int nextInt() { return Integer.parseInt(next()); } public long nextLong() { return Long.parseLong(next()); } }
相关文章推荐
- xstream学习,对象和xml之间转换,对象和json之间转换
- iOS Scrollview中的AutoLayout(纯IB)
- 通过Python编写模拟器对方案进行测试和分析的方法_Prj001
- 『Luogu OJ』『C++』Level 1-3 循环!循环!循环!
- Android v7 包导入报错问题
- java io 装饰设计模式
- JDK 源码 阅读 - 2 - 设计模式 - 创建型模式
- 菜鸟学习日志3.界面控件的设置
- poj 1195 (二维树状数组入门,模板题)
- C语言中可变参数的用法
- ScrollView不能全屏问题
- 开源数据引擎-介绍(附源码)
- AngularJs中文社区学习资料
- 第七天笔记
- [LeetCode]Combine Two Tables
- 使用newInstance()来实例化fragment
- 从“优衣库试衣间门”看激发营销
- IO流
- ACM_暑期计划
- leetcode 038 —— Combination Sum