D. Beautiful Array

题意

给你一个长度为 \(n\) 的序列。你可以选择至多一个子段,将该子段所有数乘上给定常数 \(x\) 。求操作后最大的最大子段和。

题解

考虑最大子段和的子段一共有三类点:1. 左边没有 \(\times x\) 的点 ; 2. 中间 \(\times x\) 的点; 3. 右边没有 \(\times x\) 的点。

考虑 dp 。设 \(f[i][1/2/3]\) 表示前 \(i\) 个数,第 \(i\) 个数作为第 1/2/3 类点的最大子段和。转移显然。

code

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=3e5+5;
inline int gi()
{
char c; int x=0,f=1;
for(;c<'0'||c>'9';c=getchar())if(c=='-')f=-1;
for(;c>='0'&&c<='9';c=getchar())x=(x<<1)+(x<<3)+c-'0';
return x*f;
}
int a[N],n,x;
long long f[N][5],ans=0;
int main()
{
n=gi(),x=gi();
for(int i=1;i<=n;++i) a[i]=gi();
for(int i=1;i<=n;++i)
{
f[i][1]=max(0ll,f[i-1][1])+a[i];
f[i][2]=max(0ll,max(f[i-1][1],f[i-1][2]))+1ll*a[i]*x;
f[i][3]=max(f[i-1][2],f[i-1][3])+a[i];
ans=max(ans,max(f[i][1],max(f[i][2],f[i][3])));
}
printf("%I64d",ans);
}

E. Guess the Root

题意

交互题。有一个 \(k(k\le 10)\) 次多项式 \(f(x)\) ,你可以进行不超过 \(50\) 次询问,每次询问给出 \(x\) ,返回 \(f(x)\) 。求 \(x_0\) 使得 \(f(x_0) \equiv 0 \mod (10^6 + 3)\) 。

题解

以下设 \(m=10^6+3\) 。

插值傻逼题。询问 \(k+1\) 次,然后枚举零点插值判断即可。

直接插值是 \(O(m k^2 \log m)\) 的。众所周知,当 \(x\) 取 \(1\sim n\) 可以通过预处理阶乘使插值复杂度降到 \(O(n)\) 。

当然由于本题 \(k\le 10\),我们甚至可以直接暴力打表分母。复杂度 \(O(mk)\) 。

code

#include<cstdio>
const int N=25,Mod=1e6+3;
const int n=11;
int y[N],k,inv[Mod+2];
int fm[]={404910,950915,220896,410947,30845,962989,30845,410947,220896,950915,404910};
inline int po(int x, int y)
{
int r=1;
while(y)
{
if(y&1) r=1ll*r*x%Mod;
x=1ll*x*x%Mod, y>>=1;
}
return r;
}
int judge(int k)
{
int ans=0,base=1;
for(int i=1;i<=n;++i) if(k!=i) base=1ll*base*(k-i)%Mod;
if(1<=k&&k<=11) return (1ll*base*fm[k-1]%Mod*y[k]%Mod+Mod)%Mod;
base=(base+Mod)%Mod;
for(int i=1;i<=n;++i)
ans=(ans+1ll*base*inv[(k-i+Mod)%Mod]%Mod*fm[i-1]%Mod*y[i]%Mod)%Mod;
return ans;
}
int main()
{
for(int i=1;i<=n;++i)
{
printf("? %d\n",i);
fflush(stdout);
scanf("%d",&y[i]);
}
inv[0]=inv[1]=1;
for(int i=2;i<Mod;++i) inv[i]=1ll*(Mod-Mod/i)*inv[Mod%i]%Mod;
for(int k=0;k<Mod;++k)
if(!judge(k))
{
printf("! %d\n",k);
fflush(stdout);
return 0;
}
printf("! -1\n");
fflush(stdout);
}

Educational Codeforces Round 63 选做的更多相关文章

  1. Educational Codeforces Round 64 选做

    感觉这场比赛题目质量挺高(A 全场最佳),难度也不小.虽然 unr 后就懒得打了. A. Inscribed Figures 题意 给你若干个图形,每个图形为三角形.圆形或正方形,第 \(i\) 个图 ...

  2. Educational Codeforces Round 65 选做

    好久没更博客了,随便水一篇 E. Range Deleting 题意 给你一个长度为 \(n\) 的序列 \(a_1,a_2,\dots a_n\) ,定义 \(f(l,r)\) 为删除 \(l\le ...

  3. Educational Codeforces Round 63 (Rated for Div. 2) 题解

    Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...

  4. [Educational Codeforces Round 63 ] D. Beautiful Array (思维+DP)

    Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array time limit per test 2 seconds ...

  5. Educational Codeforces Round 63部分题解

    Educational Codeforces Round 63 A 题目大意就不写了. 挺简单的,若果字符本来就单调不降,那么就不需要修改 否则找到第一次下降的位置和前面的换就好了. #include ...

  6. Educational Codeforces Round 63 Div. 2

    A:找到两个相邻字符使后者小于前者即可. #include<bits/stdc++.h> using namespace std; #define ll long long #define ...

  7. Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array 分类讨论连续递推dp

    题意:给出一个 数列 和一个x 可以对数列一个连续的部分 每个数乘以x  问该序列可以达到的最大连续序列和是多少 思路: 不是所有区间题目都是线段树!!!!!! 这题其实是一个很简单的dp 使用的是分 ...

  8. Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array(动态规划.递推)

    传送门 题意: 给你一个包含 n 个元素的序列 a[]: 定义序列 a[] 的 beauty 为序列 a[] 的连续区间的加和最大值,如果全为负数,则 beauty = 0: 例如: a[] = {1 ...

  9. Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array (简单DP)

    题目:https://codeforces.com/contest/1155/problem/D 题意:给你n,x,一个n个数的序列,你可以选择一段区间,区间的数都乘以x,然后求出最大字段和 思路: ...

随机推荐

  1. 十一 Spring的AOP开发的相关术语

    SpringAOP简介: AOP思想最早是由AOP联盟组织提出的.Spring使用这种思想最好的框架. Spring的AOP有自己实现的方式,但是非常繁琐.AspectJ是一个AOP框架,Spring ...

  2. 孤荷凌寒自学python第103天认识区块链017

    [主要内容] 今天继续分析从github上获取的开源代码怎么实现简单区块链的入门知识,共用时间25分钟. (此外整理作笔记花费了约34分钟) 详细学习过程见文末学习过程屏幕录像. 今天所作的工作是进一 ...

  3. IntelliJ IDEA常用快捷键大全

    如果想要非常高效的使用IDEA这款工具,应该掌握图中已被标记的快捷键. 另: 代码实时模板生成:psvm/sout/ifn等 按Tab键快速生成模板. 转载请保留或注明出处:http://www.cn ...

  4. swoole 父子进程间通信

    <?php /** * 场景: * 监控订单表状态 父子进程通信 * 一个主进程 两个子进程实现 */ //设置主进程名 echo '主进程id:' . posix_getpid() . PHP ...

  5. nodeJS - 定义全局变量

    定义 : global.变量名=‘xxxx’; 取出 :    global.变量名

  6. 用Hyper-v 在win10下使用Docker-Desktop体验kubernetes

    首先开启Hyper-v ,会自动创建一个交换机. 开启internet共享,自动创建的那个交换机(虚拟的网络适配器)会分配一个默认的IP 192.168.137.1,这个IP你不爽,就用注册表搜索并修 ...

  7. 提高unigui开发效率的两个方法(02)

    1.编译时自己退出运行的程序. 在做unigui开发时,每次编译运行时,unigui的应用都会在后台运行,每次重新编译时都必须手工在任务栏里将应用退出才行,非常麻烦,可以在项目编译的参数里加上杀进程的 ...

  8. 攻防世界web进阶区(1)

    1.题目地址:http://111.198.29.45:43589 页面提示打开robots文件,则: 页面有提示输入fl0g.php,那么 获取flag. 2.题目地址:http://111.198 ...

  9. QQ企业通--客户端登陆模块设计---知识点2

    Maximizable 属性               获取一个值,该值指定窗口是否可以最大化. fromBorderstyle 成员名称    说明 None            无边框. Fi ...

  10. Python学习笔记001

    二进制 换算: 十进制转二进制 除二取余,然后倒序排列,高位补零. 将正的十进制数除以二,得到的商再除以二,依次类推知道商为零或一时为止,然后在旁边标出各步的余数,最后倒着写出来,高位补零就可以. 二 ...