hdu4073 Lights

题意:找出m个不同的n位2进制数,异或值中前v个为1,其余为0的方案数,答案 % 10567201。。

思路:比赛时第一感觉是用容斥原理做的,然后推呀推,搞了2个小时还是错了。。赛后才知道递推才是正解(也许容斥是可以的,是我太弱了,推不出吧)

因为异或的特性,所以这m个数异或为x(前v个为1,其余为0的m位数),相当于这m个数异或x为0,。。

也就是说如果知道m-1个数,第m个数也唯一被确定了。。

假设f[m]为m个数的方案数,那么不考虑重复的情况下,f[m] = C(2^n, m-1)

那么如何去除重复了,如果出现重复(一定最多只有两个数重复),那么这两个书异或值为0,发现什么了没有。。

也就是去掉这两个数,就是f[m-2]了吧。。

除此之外,对于合法的每一组方案,会算m次吧

so,f[m] = (C(2^n, m-1) - f[m-2] * (2^n - (m-2))) / m;

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <cmath>
 6 #include <algorithm>
 7 #include <vector>
 8 #include <cstdlib>
 9 #include <sstream>
10 #include <fstream>
11 #include <list>
12 #include <deque>
13 #include <queue>
14 #include <stack>
15 #include <map>
16 #include <set>
17 #include <bitset>
18 #include <cctype>
19 #include <ctime>
20 #include <utility>
21 #define M0(x) memset(x, 0, sizeof(x))
22 #define clr(x,y) memset(x, y, sizeof(x))
23 #define P 10567201
24 #define N 1010
25 using namespace std;
26 long long c[1010][1010], two[1010];
27 int n, m, v;
28 long long f[N+5], inv[N+5];
29 using namespace std;
30
31 void get_inv(){
32     inv[1] = 1;
33     for (int i = 2; i < N; ++i)
34         inv[i] = (P - P / i) * inv[P % i] % P;
35 }
36
37 void pre_do(){
38      get_inv();
39      two[0] = 1;
40      for (int i = 1; i < N; ++i){
41          two[i] = (two[i-1] << 1);
42          if (two[i] >= P) two[i] -= P;
43     }
44     for (int i = 1; i < N; ++i){
45          c[i][0] = 1;
46          for (int j = 1; j < N; ++j)
47              c[i][j] = c[i][j-1] * (two[i]-j+1) % P * inv[j] % P;
48     }
49 }
50
51 void solve(){
52      if (v == 0) f[0] = 1;
53      else f[0] = 0;
54      f[1] = 1;
55      for (int i = 2; i <= m; ++i){
56         long long same = f[i-2] * (two[n]-i+2) % P;
57         f[i] = (c[n][i-1] - same) * inv[i] % P;
58      }
59      f[m] += (f[m] < 0 ? P : 0);
60      printf("%I64d\n", f[m]);
61 }
62
63 int main(){
64 //    freopen("a.in","r",stdin);
65 //    freopen("a.out","w",stdout);
66     pre_do();
67     while (scanf("%d%d%d", &n, &m, &v) != EOF){
68          if (!(n+m+v)) break;
69          solve();
70     }
71     return 0;
72 }
时间: 2024-10-06 23:33:14

hdu4073 Lights的相关文章

游戏框架其九:灯光和材质( Lights and Material )

灯光和材质的实现如下: 1. 灯光 #pragma once //========================================================================= // Lights.h - implements a simple light class for the scene graph //========================================================================= #

uva 11605 - Lights inside a 3d Grid(概率)

option=com_onlinejudge&Itemid=8&page=show_problem&problem=2652" style="">题目链接:uva 11605 - Lights inside a 3d Grid 题目大意:给定一个三维坐标系大小,每一个位置有一个灯.初始状态为关.每次随机选中两个点,以这两点为对角线的长方体内全部灯转变状态.操作K次.问说平均情况下.最后会有多少栈灯亮着. 解题思路:枚举坐标系上的点.计算单个点亮着

POJ 1222 EXTENDED LIGHTS OUT 高斯消元

点击打开链接 EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6492   Accepted: 4267 Description In an extended version of the game Lights Out, is a puzzle with 5 rows of 6 buttons each (the actual puzzle has 5 rows of 5 butt

poj1222 EXTENDED LIGHTS OUT

EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7202   Accepted: 4718 Description In an extended version of the game Lights Out, is a puzzle with 5 rows of 6 buttons each (the actual puzzle has 5 rows of 5 buttons eac

HDU 4770 Lights Against Dudely 暴力枚举+dfs

又一发吐血ac,,,再次明白了用函数(代码重用)和思路清晰的重要性. 11779687 2014-10-02 20:57:53 Accepted 4770 0MS 496K 2976 B G++ czy Lights Against Dudely Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1360    Accepted Subm

sgu 103 Traffic Lights

这道题难得不是算法,而是处理. 题意就是让你求最短路,只有当两个点在某一秒颜色相同时,这条边才可以通行,输入首先给你 起点和终点, 然后给你 点数和边数, 接下来 n 行 初始颜色,初始颜色持续时间,蓝色持续时间,紫色持续时间. 再接下来m行,无向边的起点和终点以及通过所需的时间. 题意他说的有些模糊,样例我看了很多遍也不对,后来才发现如果你在某一秒到达一个点,这一秒颜色和下一个点相同,但是下一秒这个点就要变色,那么是不能在这一秒走的,这个具体处理起来很麻烦 这篇博客说的很详细,戳链接:http

BZOJ 1770: [Usaco2009 Nov]lights 燈

1770: [Usaco2009 Nov]lights 燈 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 840  Solved: 397[Submit][Status][Discuss] Description 貝希和她的閨密們在她們的牛棚中玩遊戲.但是天不從人願,突然,牛棚的電源跳閘了,所有的燈都被關閉了.貝希是一個很膽小的女生,在伸手不見拇指的無盡的黑暗中,她感到驚恐,痛苦與絕望.她希望您能夠幫幫她,把所有的燈都給重新開起來!她才能繼續快樂地

关灯看视频(Turn Off the Lights)

插件介绍 随着使用互联网的人越来越多在网络上看视频已是常事一些相关的软件就运应而生今天为大家推荐一个能够提高用户们看视频体验的插件.关灯看视频Turn Off the Lights观看视频时自动调暗页面让您仿佛置身于电影院中只要轻轻按下灯的开关页面就会暗淡下去. 然后您就可以专心享受视频了. 再按一次开关页面就会恢复回原来的样子.Turn Off the Lights是一个轻量而实用的插件它为更舒适的观看体验而设计. 它适用于所有已知的视频网站例如 YouTube. Vimeo. Dailymo

uva 1560 - Extended Lights Out(枚举 | 高斯消元)

题目链接:uva 1560 - Extended Lights Out 题目大意:给定一个5?6的矩阵,每个位置上有一个灯和开关,初始矩阵表示灯的亮暗情况,如果按了这个位置的开关,将会导致周围包括自己位置的灯状态变换,求一个按开关位置,保证所有灯都灭掉. 解题思路: 枚举,枚举第一行的状态,然后递推出后面四行的状态. 高斯消元,对于每个位置对定变量,这样列出30个方程求解. C++ 枚举 #include <cstdio> #include <cstring> #include &