NOIp2018集训test-10-21 (联考六day1)
今天被高一狂踩,两个手抖,t1一个1写成2,t3一个+=写成=,所谓失之毫厘谬以千里,直接丢了50分。
完全背包
看到背包体积如此之大物品体积如此之小容易很想到贪心,肯定要先加很多很多的性价比最高的最后一部分再背包处理。
具体到底要加到多少随便估计一下都能过,我非常暴力地把1~100跟其他所有数取lcm再取最大值也就4.8e5的样子,5e5的背包都跑得飞快。
而数据似乎很水有人只跑了100的背包都过了。。。
题解证明出了更小的限制,最多跑100*100的背包就够了
//Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=5e5+,up=5e5;
typedef long long LL;
typedef double db;
using namespace std;
int n,v[],a[N],b[N],tot,sta[],top;
LL m,f[N],ans; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} #define ANS
int main() {
#ifdef ANS
freopen("backpack.in","r",stdin);
freopen("backpack.out","w",stdout);
#endif
read(n); read(m);
memset(v,-,sizeof(v));
For(i,,n) {
int a,b;
read(a); read(b);
if(b>v[a]) v[a]=b;
}
For(i,,) if(v[i]!=-) {
a[++tot]=i;
b[tot]=v[i];
}
For(i,,up) {
For(j,,tot) {
if(i-a[j]<) break;
if(f[i-a[j]]+b[j]>f[i]) f[i]=f[i-a[j]]+b[j];
}
}
int mx=;
For(i,,tot) {
if(b[i]*a[mx]>b[mx]*a[i]) mx=i;
}
For(i,,tot) {
if(b[i]*a[mx]==b[mx]*a[i]) sta[++top]=i;
}
if(m<=up) ans=f[m];
else {
For(i,,top) {
for(LL v=m/a[sta[i]]*a[sta[i]];v>=&&m-v<=up;v-=a[sta[i]]) {
if(v/a[sta[i]]*b[sta[i]]+f[m-v]>ans) ans=v/a[sta[i]]*b[sta[i]]+f[m-v];
}
}
}
printf("%lld\n",ans);
Formylove;
}
快速排序
数据结构水题。发现取法就是合法的括号序列,第一个答案就是后一半的和-前一半的和,第二个答案就是偶数和-奇数和,第三个答案就是卡特兰数。
//Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=1e6+,p=1e9+;
typedef long long LL;
typedef double db;
using namespace std;
int n,m,a[N],fac[N],inv[N],invp[N]; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} LL mo(LL x) { return x<?x+p:(x>=p?x-p:x); } LL Ct(int n) {
return (LL)fac[*n]*invp[n]%p*invp[n]%p*inv[n+]%p;
} int sg[N<<],sg2[N<<],lz[N<<];
#define lc x<<1
#define rc ((x<<1)|1)
#define mid ((l+r)>>1)
void add(int x,int len,LL v) {
sg[x]=mo(v*len%p+sg[x]);
if(len&) sg2[x]=mo(v+sg2[x]);
lz[x]=mo(v+lz[x]);
} void down(int x,int l_len,int r_len) {
if(!lz[x]) return;
add(lc,l_len,lz[x]);
add(rc,r_len,lz[x]);
lz[x]=;
} void upd(int x,int l,int r) {
sg[x]=mo((LL)sg[lc]+sg[rc]);
if((mid-l+)&) sg2[x]=mo((LL)sg2[lc]-sg2[rc]);
else sg2[x]=mo((LL)sg2[lc]+sg2[rc]);
} void build(int x,int l,int r) {
if(l==r) { sg[x]=sg2[x]=a[l]; return; }
build(lc,l,mid); build(rc,mid+,r);
upd(x,l,r);
} void update(int x,int l,int r,int ql,int qr,LL v) {
if(l>=ql&&r<=qr) {
add(x,r-l+,v); return;
}
down(x,mid-l+,r-mid);
if(ql<=mid) update(lc,l,mid,ql,qr,v);
if(qr>mid) update(rc,mid+,r,ql,qr,v);
upd(x,l,r);
} LL qry1(int x,int l,int r,int ql,int qr) {
if(l>=ql&&r<=qr) return sg[x];
down(x,mid-l+,r-mid);
if(qr<=mid) return qry1(lc,l,mid,ql,qr);
if(ql>mid) return qry1(rc,mid+,r,ql,qr);
return mo(qry1(lc,l,mid,ql,qr)+qry1(rc,mid+,r,ql,qr));
} LL nowans,nowlen;
void qry2(int x,int l,int r,int ql,int qr) {
if(l>=ql&&r<=qr) {
if(nowlen&) nowans=mo(nowans-sg2[x]);
else nowans=mo(nowans+sg2[x]);
nowlen+=(r-l+);
return ;
}
down(x,mid-l+,r-mid);
if(ql<=mid) qry2(lc,l,mid,ql,qr);
if(qr>mid) qry2(rc,mid+,r,ql,qr);
} #define ANS
int main() {
#ifdef ANS
freopen("sort.in","r",stdin);
freopen("sort.out","w",stdout);
#endif
read(n); read(m);
For(i,,n*) read(a[i]); fac[]=inv[]=inv[]=invp[]=;
For(i,,n*) inv[i]=mo(p-(LL)p/i*inv[p%i]%p);
For(i,,n*) fac[i]=(LL)fac[i-]*i%p,invp[i]=(LL)invp[i-]*inv[i]%p; build(,,n*); For(cs,,m) {
int o,l,r; LL v;
read(o); read(l); read(r);
if(o) {
LL ans1=mo(qry1(,,n*,l+(r-l)/+,r)-qry1(,,n*,l,l+(r-l)/));
nowans=nowlen=; qry2(,,n*,l,r);
nowans=mo(p-nowans);
LL ans3=Ct((r-l+)/);
/*if(cs==5) {
LL tp=0;
for(int i=l+1;i<=r;i+=2)
tp=tp+a[i];
for(int i=l;i<=r;i+=2)
tp=tp-a[i];
cout<<tp<<endl; }*/
printf("%lld %lld %lld\n",ans1,nowans,ans3);
}
else {
/*if(cs<=5) {
For(i,l,r) a[i]+=v;
}*/
read(v);
update(,,n*,l,r,v);
}
}
Formylove;
}
数位 DP
f[i][j]表示长度为i的各位之和mod 60=j的数的个数。50分随便dp一下就好了。
发现f[i]仅有f[i-1]转移来,考虑矩阵乘法优化。
题解到这里就完了,我一看,这不是sb题吗,马上敲。
好像不对啊,f[i]确实很好求,但是我要求f[1]~f[i]啊。emmmmm,思考了一下给矩阵对角线上+1,然后发现并不对,这样虽然把i-1的信息加过来了,但是更新i+1的时候就不止i在更新i-1也在更新了。那我矩阵岂不是要开到120*120,时间爆炸了啊。
然后yy了一个转移,相当于每次转移是从1~len转移到1+1~len+1,再加上f[1],就变成1~len+1了,因为f[1]只有两种,60*60的矩阵变成62*62就可以了。
//Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int p=1e9+;
typedef long long LL;
typedef double db;
using namespace std;
LL l,r,k,f[]; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} struct jz {
LL a[][];
friend jz operator *(const jz&A,const jz&B) {
jz rs;
For(i,,) For(j,,) {
rs.a[i][j]=;
For(k,,)
rs.a[i][j]=(rs.a[i][j]+A.a[i][k]*B.a[k][j]%p)%p;
}
return rs;
}
}bs,rs,base; void jzksm(LL b) {
For(i,,) For(j,,) {
if(i==j) rs.a[i][j]=;
else rs.a[i][j]=;
}
bs=base;
while(b) {
if(b&) rs=rs*bs;
bs=bs*bs;
/*For(i,0,61) {
For(j,0,61) printf("%lld ",bs.a[i][j]);
puts("");
}*/
b>>=;
}
} void pre() {
LL t1=(k-)/; t1%=p;
LL t2=(k-)%;
For(i,,) {
f[i]=t1;
if(i&&t2>=i) f[i]=(f[i]+)%p;
if(f[i]==t1) base.a[][i]=;
else base.a[][i]=;
}
f[]=t1; f[]=(t1+)%p;
For(i,,) {
base.a[i][i]=(base.a[i][i]+)%p;
For(j,,)
base.a[i][(i+j)%]=(base.a[i][(i+j)%]+f[j])%p;
}
base.a[][]=;
base.a[][]=;
/*For(i,0,61) {
For(j,0,61) printf("%lld ",base.a[i][j]);
puts("");
}*/
} LL F(LL x) {
if(!x) return ;
jzksm(x-);
LL res=;
For(i,,) if(i%==||i%==||i%==) {
LL x=;
For(j,,) x=(x+f[j]*rs.a[j][i]%p)%p;
res=(res+x)%p;
}
return res;
} #define ANS
int main() {
#ifdef ANS
freopen("digit.in","r",stdin);
freopen("digit.out","w",stdout);
#endif
read(l); read(r); read(k);
pre();
printf("%lld\n",(F(r)-F(l-)+p)%p);
//cerr<<clock()<<endl;
Formylove;
}
---------------------6-22upd-------------------------------
我真是个大sb,60阶矩阵怎么做,直接允许前导0这就是sb题了,一开始我还说这天标准分250,现在看来怕应该是中位数300吧……
NOIp2018集训test-10-21 (联考六day1)的更多相关文章
- NOIp2018集训test-9-22(am/pm) (联考三day1/day2)
szzq学长出的题,先orz一下. day1 倾斜的线 做过差不多的题,写在我自己的博客里,我却忘得一干二净,反而李巨记得清清楚楚我写了的. 题目就是要最小化这个东西 $|\frac{y_i-y_j} ...
- NOIp2018集训test-9-15(联考二day1)
T1.矩阵游戏 水题.每一行最后乘的数为x[i],每一列为y[i],暴力算第一行的列的贡献,每一行的列的贡献是公差为所有列的贡献之和的等差数列,然后每一行再乘上行的贡献求和即为答案. //Achen ...
- 六省联考2017 Day1
目录 2018.3.18 Test T1 BZOJ.4868.[六省联考2017]期末考试 T2 T3 BZOJ.4870.[六省联考2017]组合数问题(DP 矩阵快速幂) 总结 考试代码 T1 T ...
- NOIp2018集训test-10-22 (联考六day2)
中间值 两个log肯定会被卡.我用的第一种做法,就是要各种特判要在两个序列都要二分比较麻烦. //Achen #include<bits/stdc++.h> #define For(i,a ...
- NOIp2018集训test-10-6/test-10-7 (联考五day1/day2)
昨天考完月考,明天初赛,dcoi2017级今天终于开始停课准备noip了,大概没有比本弱校停课更晚的学校了吧.本来就够菜了,怕是要凉透哦. DAY1 T1石头剪刀布 据说爆搜随便做,但是我觉得我的O( ...
- NOIp2018集训test-9-7(pm) (联考一day1)
又被辉神吊打了.今天不仅被辉神李巨吊打,还给基本上给全班垫底了. 看到T3就知道是十进制快速幂,全机房考试的当时应该就我会,结果我tm没找到递推. Orz lyc BM直接水过,Orz wys六个fo ...
- NOIp2018集训test-10-4/test-10-5 (联考四day1/day2)
这个day1稍微有点毒瘤吧?? DAY1 排列 以前总是把day1t1想太复杂了翻车,差不多往正解的方向想了一下感觉不可能这么复杂这可是noipday1t1啊一定有非常简单的方法然后翻车了?? 题目转 ...
- ZR10.1青岛集训三地联考
ZR10.1青岛集训三地联考 谢谢dijk和smy A 题目大意: 已知斐波那契数列\(f\) 设 \[ F_i = \sum_{i = 0}^nf_if_{n - i} \] 求 \[ \sum_{ ...
- 【BZOJ4873】[六省联考2017]寿司餐厅(网络流)
[BZOJ4873][六省联考2017]寿司餐厅(网络流) 题面 BZOJ 洛谷 题解 很有意思的题目 首先看到答案的计算方法,就很明显的感觉到是一个最大权闭合子图. 然后只需要考虑怎么构图就行了. ...
随机推荐
- SQL中LEFT JOIN ON AND 与 LEFT JOIN ON WHERE的区别
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. ON...WHERE ' order by ts.id SQL执行过程: 生成临时表: ON条件: ...
- 使用nexus3.10搭建maven私有仓库
使用nexus3.10搭建maven私有仓库-----详见如下链接-- --此贴用于笔记 https://blog.csdn.net/vipbupafeng/article/details/80232 ...
- 【Flutter学习】页面布局之其它布局处理
一,概述 Flutter中拥有30多种预定义的布局widget,常用的有Container.Padding.Center.Flex.Row.Colum.ListView.GridView.按照< ...
- angularjs的select使用2
https://cnodejs.org/topic/549007b44823a0234c9e1716 myAppModule.controller('FrmController', ['$scope' ...
- python自动化之函数封装
函数最重要的目的是方便我们重复使用相同的一段程序. 将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句. 前面一些记录了selenium的各种API ...
- python 比较俩个列表中的元素是否相同
如果元素都是数字: # a = [121, 144, 19, 161, 19, 144, 19, 11]# b = [121, 14641, 20736, 361, 25921, 361, 20736 ...
- [STemWin教程入门篇] 第一期:emWin介绍
转自:http://bbs.armfly.com/read.php?tid=1544 SEGGER公司介绍 了解emWin之前,先了解一下SEGGER这家公司,了解生产商才能对emWin有更加全面的认 ...
- (18)C++ string和标准模板库
一.stringl类 1.string构造函数 string a1("abc");//初始化字符串 cout<<a1<<endl;//abc , '#'); ...
- java Wrapper包装类
什么是包装类?为什么需要包装类? 这是大家要了解的 对于java中的基本数据类型我们如果想要把当当做类来使用怎么办呢? 如果想要对这些基本数据类型直接调用一些方法来操作的话 怎么做呢? 由以上就产生了 ...
- IIS发布获取apk文件,部署IIS遇到的问题记录
今天需要帮着测试一下PDA的检测更新功能,所以需要把web部署到IIS上. 在部署的时候,遇到了两个小问题. 一.web 服务器被配置为不列出此目录的内容. 解决办法:1.按照提示的可尝试操作,启用了 ...