Codeforces round 1106
Div 2 536
我还是太菜了.jpg
E
傻逼DP直接做
我居然调了1.5h
我真的是太菜了.jpg
堆+扫描线直接维护每个位置的贪心结果
然后要么使用干扰
要么就接受贪心的结果
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <iostream>
#include <bitset>
using namespace std;
#define N 100005
#define M 205
#define ll long long
int n,m,K,p[N];ll f[N][M];
struct node{int s,t,d,w;}a[N];
bool cmp(const node &a,const node &b){return a.s==b.s?a.t<b.t:a.s<b.s;}
priority_queue<pair<pair<int ,int > ,int > >q;
int main()
{
scanf("%d%d%d",&n,&m,&K);memset(f,0x3f,sizeof(f));
for(int i=1;i<=K;i++)scanf("%d%d%d%d",&a[i].s,&a[i].t,&a[i].d,&a[i].w);sort(a+1,a+K+1,cmp);
for(int i=1,j=1;i<=n;i++)
{
while(a[j].s<=i&&j<=K)q.push(make_pair(make_pair(a[j].w,a[j].d),j)),j++;
while(!q.empty()&&a[q.top().second].t<i)q.pop();
if(!q.empty())p[i]=q.top().second;
}
f[1][0]=0;
for(int i=1;i<=n;i++)
for(int j=0;j<=m;j++)
{
int x=p[i];
f[i+1][j+1]=min(f[i][j],f[i+1][j+1]);
if(x)f[a[x].d+1][j]=min(f[i][j]+a[x].w,f[a[x].d+1][j]);
else f[i+1][j]=min(f[i][j],f[i+1][j]);
}
ll ans=1ll<<60;
for(int i=0;i<=m;i++)ans=min(ans,f[n+1][i]);
printf("%lld\n",ans);
}
F
- 这不是一个特征多项式优化常系数线性齐次递推裸题嘛!
然后我就开始写了...
然后我发现我不会求$K$次剩余...
然后我就GG了...
所以这个题不用会求$K$次剩余...
那么根据原根的性质,我们可以发现,$K$次剩余可以表达为$\frac{q}{p} \mod 998244352$的形式,其中$q$表达为$m = 3^q \mod 998244353$,$p=k$
如果$K$不存在逆元的话,就没有对应的$K$次剩余...
然后,就可以通过BSGS+exgcd求
所以矩阵乘法就能做的题,为啥我要用特征多项式啊!!!!!
附上代码:
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <bitset>
#include <map>
using namespace std;
#define N 205
#define ll long long
#define mod 998244353
#define mmod 998244352
int a[N],b[N],mo[N],tmp[N],n,k,m,ans;
int q_pow(int x,int n){int ret=1;for(;n;n>>=1,x=(ll)x*x%mod)if(n&1)ret=(ll)ret*x%mod;return ret;}
void mul(int *a,int *b,int *ret)
{
memset(tmp,0,sizeof(tmp));
for(int i=0;i<k;i++)
for(int j=0;j<k;j++)
tmp[i+j]=(tmp[i+j]+(ll)a[i]*b[j])%mmod;
for(int i=(k<<1)-2;i>=k;i--)if(tmp[i])for(int j=1;j<=k;j++)
tmp[i-j]=(tmp[i-j]-(ll)tmp[i]*mo[k-j])%mmod;
for(int i=0;i<k;i++)ret[i]=tmp[i];
}
map<int ,int >mp;
int ex_gcd(int a,int b,int &x,int &y)
{
if(!b)return x=1,y=0,a;int ret=ex_gcd(b,a%b,y,x);
y=y-a/b*x;return ret;
}
int BSGS(int x)
{
int s=5000,t=1;
for(int i=0;i<s;i++)mp[int((ll)t*x%mod)]=i,t=t*3ll%mod;
for(int i=1,now=1;;i++)
{
now=(ll)now*t%mod;
if(mp.find(now)!=mp.end())return i*s-mp[now];
}
}
int main()
{
scanf("%d",&k);
for(int i=1;i<=k;i++)scanf("%d",&mo[k-i]),mo[k-i]=mmod-mo[k-i];
scanf("%d%d",&n,&m);b[1]=1;a[0]=1;
if(k==1)b[0]=mmod-mo[0],b[1]=0;
for(n--;n;n>>=1){if(n&1)mul(a,b,a);mul(b,b,b);}
int t=(a[k-1]+mmod)%mmod,x=0,y=0;
int tt=ex_gcd(t,mmod,x,y),kk=BSGS(m);
if(kk%tt)return puts("-1"),0;
x=((ll)x*(kk/tt)%mmod+mmod)%mmod;
printf("%d\n",q_pow(3,x));
}
Codeforces round 1106的更多相关文章
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
- Codeforces Round #262 (Div. 2) 1003
Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...
- Codeforces Round #262 (Div. 2) 1004
Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...
- Codeforces Round #370 - #379 (Div. 2)
题意: 思路: Codeforces Round #370(Solved: 4 out of 5) A - Memory and Crow 题意:有一个序列,然后对每一个进行ai = bi - bi ...
- Codeforces Round #371 (Div. 1)
A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...
随机推荐
- canvas :原生javascript编写动态时钟
canvas :原生javascript编写动态时钟 此时针是以画布的中心为圆心: g.translate(width/2,width/2); 此函数是将画布的原点移到(width/2,wid ...
- VC工程从Win32环境往Win64环境迁移的经验总结
作者:朱金灿 来源:http://blog.csdn.net/clever101 首先需要安装Win64的开发环境,具体参考: VS 2008的64位编译环境的安装和使用 其次在工程属性设置中作如下修 ...
- List常用几种方式
第一种,匹配俩个集合中相同的值 , , , , , , }; , , , , , , , , }; var C= listA.Intersect(listB); foreach (var item i ...
- flutter row 文字显示不全
解决:在row层中的text层加一个expend flutter Row里面元素居中显示 new Expanded( flex: , child: new Row( children: <Wid ...
- 前端构建工具Gulp使用总结
1.安装准备 1.1 Node.js安装 在安装Gulp之前首先的安装Node.js, 安装教程详见Node.js 安装配置 1.2 npm安装 在安装node的时候会自动安装npm模块管理器,详见n ...
- 在Windows上安装Gradle
1.开发环境 (1)Java:JDK8(必须是JDK或JRE7以上,使用java -version查看当前电脑java版本) (2)操作系统:Windows 7 2.安装步骤 (1)下载最新的Grad ...
- Ubuntu 18.04 修改为静态IP
1.进入/etc/netplan目录 cd /etc/netplan 2.查看文件 ls 3.编辑 01-network-manager-all.yaml vim 01-network-manager ...
- [原创]使MySQL注释语句在后台能够输出的方法
开启general log或slow log的时候,前端发出的sql语句中的注释都别屏蔽掉了. 本意加注释我们想通过注释来快速知道sql是由哪个业务模块发出的.这点对dba和研发很有帮助. 一种变通的 ...
- Git & GitHub 的安装配置
参考 教你免费搭建个人博客,Hexo&Github 安装Git 1. 注册 GitHub 注册.登录 https://github.com/ 2. 创建仓库 在 GitHub 的右上角 ...
- 第四次作业 重写equals方法
使用上几次用到得User实体类,在其中重写equals方法. @Override public boolean equals(Object obj) { if(obj==null)return fal ...