HDU4669_Mutiples on a circle
题目的意思是给你一些数字a[i](首位相连),现在要你选出一些连续的数字连续的每一位单独地作为一个数位。现在问你有多少种选择的方式使得选出的数字为k的一个倍数。
其实题目是很简单的。由于k不大(200),总共的数字个数为50000,所以我们对于当前走到的每一个数字最多的状态数目也只有50000*200个。
同时由于是循环的,我们可以使长度增倍,这样就可以保证序列是循环的了。
不过注意,增倍后空间是开不下的,所以需要使用循环的滚动数组。
同时注意递推的细节,还有有的a[i]不止一位数,不能直接取模。
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 50050
typedef long long ll;
using namespace std; int a[*maxn],f[*maxn],n,m,k,tep,cur,w[*maxn];
int s[maxn][];
ll ans; void init_(int x)
{
for (int i=; i<k; i++) s[x][i]=;
} int count(int x)
{
if (x<) return ;
if (x<) return ;
if (x<) return ;
return ;
} int get(int x)
{
if (x==) return ;
if (x==) return %k;
if (x==) return %k;
return %k;
} int power(int x,int y)
{
int tot=;
while (y)
{
if (y&) tot=(tot*x)%k;
y>>=;
x=(x*x)%k;
}
return tot;
} int main()
{
while (scanf("%d%d",&n,&k)!=EOF)
{
ans=;
w[]=,f[]=;
for (int i=; i<=n; i++)
{
scanf("%d",&a[i]);
a[i+n]=a[i];
w[i]=count(a[i]);
w[i+n]=count(a[i+n]);
}
for (int i=; i<=*n; i++) f[i]=(f[i-]*get(w[i])+a[i])%k;
for (int i=; i<=*n; i++) w[i]+=w[i-];
for (int i=; i<=n; i++)
{
init_(i);
s[i][a[i]%k]++;
for (int j=; j<k; j++) s[i][(get(w[i]-w[i-])*j+a[i])%k]+=s[i-][j];
}
for (int i=n+; i<=*n; i++)
{
int qq=i-n-;
if (qq==) qq=n;
init_(i-n);
s[i-n][a[i]%k]++;
for (int j=; j<k; j++) s[i-n][(get(w[i]-w[i-])*j+a[i])%k]+=s[qq][j];
cur=(f[i-n-]*power(,w[i]-w[i-n-]))%k;
cur=((f[i]-cur)%k+k)%k;
s[i-n][cur]--;
ans+=s[i-n][];
}
printf("%I64d\n",ans);
}
return ;
}
HDU4669_Mutiples on a circle的更多相关文章
- [翻译svg教程]svg中的circle元素
svg中的<circle> 元素,是用来绘制圆形的,例如 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink= ...
- 设计一个程序,程序中有三个类,Triangle,Lader,Circle。
//此程序写出三个类,triangle,lader,circle:其中triangle类具有类型为double的a,b,c边以及周长,面积属性, //具有周长,面积以及修改三边的功能,还有判断能否构成 ...
- c++作业:Circle
Circle Github链接
- Modified Least Square Method and Ransan Method to Fit Circle from Data
In OpenCv, it only provide the function fitEllipse to fit Ellipse, but doesn't provide function to f ...
- [javascript svg fill stroke stroke-width circle 属性讲解] svg fill stroke stroke-width circle 属性 绘制圆形及引入方式讲解
<!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...
- (1)编写一个接口ShapePara,要求: 接口中的方法: int getArea():获得图形的面积。int getCircumference():获得图形的周长 (2)编写一个圆类Circle,要求:圆类Circle实现接口ShapePara。 该类包含有成员变量: radius:public 修饰的double类型radius,表示圆的半径。 x:private修饰的double型变量x,
package com.hanqi.test; //创建接口 public interface ShapePara { //获取面积的方法 double getArea(); //获取周长的方法 do ...
- 东大oj-1591 Circle of friends
题目描述 Nowadays, "Circle of Friends" is a very popular social networking platform in WeChat. ...
- svg学习(四)circle
<circle> 标签 < <?xml version="1.0" standalone="no"?> <!DOCTYPE ...
- 后缀数组 --- WOj 1564 Problem 1564 - A - Circle
Problem 1564 - A - Circle Problem's Link: http://acm.whu.edu.cn/land/problem/detail?problem_id=156 ...
随机推荐
- 20155236 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
20155236 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验内容及步骤 (一)使用JDK编译.运行简单的java程序 命令行下的程序开发 因为我用的是windo ...
- 【LG3723】[AHOI2017/HNOI2017]礼物
[LG3723][AHOI2017/HNOI2017]礼物 题面 洛谷 题解 首先我们将\(c\)看作一个可以为负的整数,那么我们就可以省去讨论在哪个手环加\(c\)的繁琐步骤了 设我们当前已经选好了 ...
- CF 987 D. Fair
D. Fair http://codeforces.com/contest/987/problem/D 题意: n个城镇m条道路,(保证没有重边,两个城镇间可以到达),每个城镇拥有的特产ai(可能多个 ...
- datax源代码编译安装
what is DataX ? DataX是阿里巴巴集团内被广泛使用的离线数据同步工具/平台. 实现包括MySQL,SQL Server,Oracle,PostgreSQL,HDFS,Hive,HBa ...
- js创建对象 object.create()用法
Object.create()方法是ECMAScript 5中新增的方法,这个方法用于创建一个新对象.被创建的对象继承另一个对象的原型,在创建新对象时可以指定一些属性. 语法: Object.crea ...
- 安装完.net core sdk 后部署 ASP.NET Core 出现错误502.5
将项目升级到和sdk一样的版本 然后 命令行执行 iisreset
- 利用 Intel Realsense做SLAM开发(一)
最近手里拿到一台Realsense D435,就是这个: https://click.intel.com/intelr-realsensetm-depth-camera-d435.html 所以准备拿 ...
- testNG-失败用例重跑机制
下面简单介绍下testNG的失败重跑的实现方法: 1.首先编写一个类,实现IRetryAnalyzer类,重写其中的retry方法. public class TestNGRetry implemen ...
- adb shell top 命令详解
[?25l[0m[H[J 当前系统时间 Tasks: 552 total, 1 running, 510 sleeping, 0 stopped, 0 zombie 任务(进程) 系统现在共有552个 ...
- 基于C#的机器学习--机器学习的基本知识
机器学习的基本知识 ,…用n个观测值测量.但我们不再对Y的预测感兴趣,因为我们不再有Y了,我们唯一感兴趣的是在已有的特征上发现数据模式: 在前面的图中,我们可以看到这样的数据本身更适合于非线性方法 ...