http://codeforces.com/problemset/problem/889/E

题解

首先我们观察到在每次取模的过程中一定会有一次的结果是\(a_i-1\),因为如果不是,我们可以调整,答案肯定是会更优的。

于是我们的有用状态就变成了\(O(n)\)级别。

我们可以对于一个状态,把它表示为\((a,b)\),表示前\(i\)个数,当前取完模的结果为\(a\),总和写成\(i*a+b\)的形式后最大的\(b\)。

我们的转移每次要把\(a\)变成\(a%v\),再添加一个新状态\(v-1\)。

转移讨论一下。

代码

#include<bits/stdc++.h>
#define N 200009
using namespace std;
typedef long long ll;
const int mod=1e9+7;
map<ll,ll>f;
map<ll,ll>::iterator it;
int n;
inline ll rd(){
ll x=0;char c=getchar();bool f=0;
while(!isdigit(c)){if(c=='-')f=1;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
return f?-x:x;
}
int main(){
n=rd();
f[rd()-1]=0;
for(int i=2;i<=n;++i){
ll x=rd();
while(!f.empty()){
it=f.end();--it;
ll a=it->first,b=it->second;
if(a<x)break;
f.erase(it);
f[x-1]=max(f[x-1],b+1ll*(i-1)*(a-a%x-x));
f[a%x]=max(f[a%x],b+1ll*(i-1)*(a-a%x));
}
}
ll ans=0;
for(it=f.begin();it!=f.end();++it)ans=max(ans,it->first*n+it->second);
cout<<ans;
return 0;
}

CF889E Mod Mod Mod的更多相关文章

  1. FZU 1752 A^B mod C(快速加、快速幂)

    题目链接: 传送门 A^B mod C Time Limit: 1000MS     Memory Limit: 65536K 思路 快速加和快速幂同时运用,在快速加的时候由于取模耗费不少时间TLE了 ...

  2. hdu.1104.Remainder(mod && ‘%’ 的区别 && 数论(k*m))

    Remainder Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  3. 关于n!mod p

    2016.1.26 让我们来研究一下关于n!在mod p下的性质,当然这里p是质数. 首先n!=a*pe,其中p不可整除a.我们现在来做两件事情,求e和a mod p. 显然,n/p表示[1,n]中p ...

  4. 取模(mod)

    取模(mod) [题目描述] 有一个整数a和n个整数b_1, …, b_n.在这些数中选出若干个数并重新排列,得到c_1,…, c_r.我们想保证a mod c_1 mod c_2 mod … mod ...

  5. BSGS模版 a^x=b ( mod c)

    kuangbin的BSGS: c为素数: #define MOD 76543 int hs[MOD],head[MOD],next[MOD],id[MOD],top; void insert(int ...

  6. Mod 与 RequireJS/SeaJS 的那些事

    本文的目的是为了能大让家更好的认识 Mod,之所以引入 RequireJS/SeaJS 的对比主要是应大家要求更清晰的对比应用场景,并不是为了比较出孰胜孰劣,RequireJS 和 SeaJS 都是模 ...

  7. C(n+m,m) mod p的一类算法

    Lucas定理 A.B是非负整数,p是质数.AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]. 则组合数C(A,B)与C(a[n],b[n])*C(a[n ...

  8. Mod in math

    An Introduction to Modular Math When we divide two integers we will have an equation that looks like ...

  9. 51nod 1008 N的阶乘 mod P

    输入N和P(P为质数),求N! Mod P = ? (Mod 就是求模 %)   例如:n = 10, P = 11,10! = 3628800 3628800 % 11 = 10   Input 两 ...

  10. 51 Nod 1008 N的阶乘 mod P【Java大数乱搞】

    1008 N的阶乘 mod P 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 输入N和P(P为质数),求N! Mod P = ? (Mod 就是求模 %)   例如:n ...

随机推荐

  1. 打印 PRINT

    打印 PRINT 字符串和数值类型 可以直接输出. print(1) #out:1 print('a') #out:a 变量 无论什么类型,数值,字符串,列表,字典...都可以直接输出 n = 1 s ...

  2. 关于this与e.target区别以及data-*属性

    1 this与event.target 在编写事件函数时可以传入一个event参数,even参数可以使用一个target属性如even.target用以调用,其作用是指向返回事件的目标节点(触发该事件 ...

  3. java基础笔记(6)

    xml文件的写入 通过dom生成xml文件: package com.writexml; import java.io.File; import javax.xml.parsers.DocumentB ...

  4. 常用php算法

       一.冒泡排序function bubble($array){ $cnt = count($array); if($cnt <= 0) return $array; for($i =1;$i ...

  5. [LeetCode] 116. 填充每个节点的下一个右侧节点指针

    题目链接 : https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/ 题目描述: 给定一个完美二叉树 ...

  6. Java的同名属性、同名普通函数、同名静态函数,是否被覆盖

    作者按:虚拟函数的概念早就滚瓜烂熟了.但是今天面试发现:1.同名属性,2.同名普通函数,3.同名静态函数,是否被覆盖的问题.请看下面三个例子: 例子1:测试父类的属性是否存在和被完全覆盖class A ...

  7. IDEA 增加对JPA的支持 执行JPQL语句

    IDEA 可以在控制台console中执行JPQL语句: 1. 在已存在的项目中选择项目结构: 2. 选择模块-指定实体所在的模块-选择上面的号 2. 选择要添加的模块:我们使用的是JPA,也可能有的 ...

  8. 在webpack中配置.vue组件页面的解析

    1. 运行`cnpm i vue -S`将vue安装为运行依赖: 2. 运行`cnpm i vue-loader vue-template-compiler -D`将解析转换vue的包安装为开发依赖: ...

  9. HTML第一课(前期知识准备)

    在正式的学习之前,我们先了解一些前端方面的常识. 一.前端是做什么? 如果有认真看过我写的预备程序员不得不知道的事儿这篇文章的同学应该清楚,前端的工作在整个项目开发中处于代码编写阶段,主要是用来做界面 ...

  10. SpringMVC+Spring4+Mybatis3

    http://blog.csdn.net/jiuqiyuliang/article/details/45286191 http://blog.csdn.net/jiuqiyuliang/article ...