【原根】【动态规划】【bitset】2017四川省赛 K.2017 Revenge

题意:

给你n(不超过200w)个数,和一个数r,问你有多少种方案,使得你取出某个子集,能够让它们的乘积 mod 2017等于r。

2017有5这个原根,可以使用离散对数(指标)的思想把乘法转化成加法,然后就可以用bitset优化dp了。

裸的dp方程是f(i,j)=f(i-1,j)+f(i-1,(j-I(a(i)))%2016),第一维可以滚动。I(i)规定为i的指标,但是我们这里不像《数论概论》那本书上把I(1)规定为2016,而当成0,比较方便。

#include<cstdio>
#include<bitset>
#include<iostream>
using namespace std;
bitset<2016>f;
int n,a[2000005],r,I[2020];
int main(){
	//freopen("yuangen.in","r",stdin);
	int pw=1;
	for(int i=1;i<2017;++i){
		pw=(pw*5)%2017;
		I[pw]=i;
	}
	I[1]=0;
	while(scanf("%d%d",&n,&r)!=EOF){
		f.reset();
		f.set(I[1]);
		for(int i=1;i<=n;++i){
			scanf("%d",&a[i]);
		}
		for(int i=1;i<=n;++i){
			f^=((f<<I[a[i]])^(f>>(2016-I[a[i]])));
		}
		cout<<f[I[r]]<<endl;
	}
	return 0;
}
时间: 2024-08-02 07:00:24

【原根】【动态规划】【bitset】2017四川省赛 K.2017 Revenge的相关文章

2017四川省赛D题《Dynamic Graph》

题意:给出一个n个点m条边的有向无环图(DAG),初始的时候所有的点都为白色.然后有Q次操作,每次操作要把一个点的颜色改变,白色<->黑色,对于每次操作,输出满足下列点对<u,v>,u,v都为白色且可以相互到达的个数. 数据范围: DAG上的问题,首先最暴力的方法就是,对于每一次更改都进行一遍dfs,B[u][v],表示U点可以到达v点,然后对于U的父亲结点来说,暴力合并,复杂度约为n^4,这样显然会爆炸.解法是每次用BITSET优化,因为B[u][v]的状态非零即一. 代码如下:

2017浙江省赛 D - Let&#39;s Chat ZOJ - 3961

地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3961 题目: ACM (ACMers' Chatting Messenger) is a famous instant messaging software developed by Marjar Technology Company. To attract more users, Edward, the boss of Marjar Company, has re

CCPC 2017 网络赛

1001.我们的想法是,先构造n个要删掉的点,然后不断给图加边,使得每条边的其中一个点在n个点之中. 我们要使n个点之外的点尽量多,并且每次删掉的点在n个点之外. 贪心的决策是,每次操作,前n个点的度和令外的最大度的点度数相同. 然后删掉这个点之后,之后的操作,剩余的点也满足这个要求.所以度数最大的点必定与n个点有边. 于是可以这样构造,增加n批点(i = 1~n),每次增加n/i个点的,每个增加的点连出i条边到n个点. 这样,n个点每次增加的最大度数不超过1.但每次删点的时候(按n~1批的顺序

2017乌鲁木齐区域赛K(容斥原理【求指定区间内与n互素的数的个数】)

#include<bits/stdc++.h>using namespace std;const long long mod = 998244353;typedef const long long ll;vector<long long>p;long long inv(long long x,long long y)//快速幂求逆元模板(以乘代除){    long long r=1;    while(y>0)    {        if(y&1)        

2019省赛训练组队赛4.9周二 2017浙江省赛

A - Cooking Competition "Miss Kobayashi's Dragon Maid" is a Japanese manga series written and illustrated by Coolkyoushinja. An anime television series produced by Kyoto Animation aired in Japan between January and April 2017. In episode 8, two

2017浙江省赛 A - Cooking Competition ZOJ - 3958

地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3958 题目: "Miss Kobayashi's Dragon Maid" is a Japanese manga series written and illustrated by Coolkyoushinja. An anime television series produced by Kyoto Animation aired in Japan b

hihoCoder 1578 Visiting Peking University 【贪心】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)

#1578 : Visiting Peking University 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Ming is going to travel for n days and the date of these days can be represented by n integers: 0, 1, 2, -, n-1. He plans to spend m consecutive days(2 ≤ m ≤ n)in Beijing. Durin

hihoCoder 1584 Bounce 【数学规律】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)

#1584 : Bounce 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 For Argo, it is very interesting watching a circle bouncing in a rectangle. As shown in the figure below, the rectangle is divided into N×M grids, and the circle fits exactly one grid. The bouncing

2017区域赛简要小结

仅以此篇献给我即将逝去的2017年 ACM/ICPC系列赛事一站一站地打下去,和NOI系列赛事差不多.理论上说,只要有实力,拿不拿名次都无所谓.但"算法竞赛"的魅力就是如此:能拿WF的门票,能取得名次,这就是实力的证明,也是你追梦成功的证明! 前几天,灿哥约我咖啡,传授了一些"看上去比较显然,但肯定还不能完全理解"的人生道理给我.不过,至少这让我明白了ACM/ICPC赛事的成功之处.目标明确,摒弃杂念,就能持之以恒地向前努力.一个想进final的单纯动机,比很多荣誉