今天被高一狂踩,两个手抖,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)的更多相关文章

  1. NOIp2018集训test-9-22(am/pm) (联考三day1/day2)

    szzq学长出的题,先orz一下. day1 倾斜的线 做过差不多的题,写在我自己的博客里,我却忘得一干二净,反而李巨记得清清楚楚我写了的. 题目就是要最小化这个东西 $|\frac{y_i-y_j} ...

  2. NOIp2018集训test-9-15(联考二day1)

    T1.矩阵游戏 水题.每一行最后乘的数为x[i],每一列为y[i],暴力算第一行的列的贡献,每一行的列的贡献是公差为所有列的贡献之和的等差数列,然后每一行再乘上行的贡献求和即为答案. //Achen ...

  3. 六省联考2017 Day1

    目录 2018.3.18 Test T1 BZOJ.4868.[六省联考2017]期末考试 T2 T3 BZOJ.4870.[六省联考2017]组合数问题(DP 矩阵快速幂) 总结 考试代码 T1 T ...

  4. NOIp2018集训test-10-22 (联考六day2)

    中间值 两个log肯定会被卡.我用的第一种做法,就是要各种特判要在两个序列都要二分比较麻烦. //Achen #include<bits/stdc++.h> #define For(i,a ...

  5. NOIp2018集训test-10-6/test-10-7 (联考五day1/day2)

    昨天考完月考,明天初赛,dcoi2017级今天终于开始停课准备noip了,大概没有比本弱校停课更晚的学校了吧.本来就够菜了,怕是要凉透哦. DAY1 T1石头剪刀布 据说爆搜随便做,但是我觉得我的O( ...

  6. NOIp2018集训test-9-7(pm) (联考一day1)

    又被辉神吊打了.今天不仅被辉神李巨吊打,还给基本上给全班垫底了. 看到T3就知道是十进制快速幂,全机房考试的当时应该就我会,结果我tm没找到递推. Orz lyc BM直接水过,Orz wys六个fo ...

  7. NOIp2018集训test-10-4/test-10-5 (联考四day1/day2)

    这个day1稍微有点毒瘤吧?? DAY1 排列 以前总是把day1t1想太复杂了翻车,差不多往正解的方向想了一下感觉不可能这么复杂这可是noipday1t1啊一定有非常简单的方法然后翻车了?? 题目转 ...

  8. ZR10.1青岛集训三地联考

    ZR10.1青岛集训三地联考 谢谢dijk和smy A 题目大意: 已知斐波那契数列\(f\) 设 \[ F_i = \sum_{i = 0}^nf_if_{n - i} \] 求 \[ \sum_{ ...

  9. 【BZOJ4873】[六省联考2017]寿司餐厅(网络流)

    [BZOJ4873][六省联考2017]寿司餐厅(网络流) 题面 BZOJ 洛谷 题解 很有意思的题目 首先看到答案的计算方法,就很明显的感觉到是一个最大权闭合子图. 然后只需要考虑怎么构图就行了. ...

随机推荐

  1. hdu 6092 Rikka with Subset (集合计数,01背包)

    Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...

  2. toleft时设置TabSequence属性为tsReversetoright时设置TabSequence属性为tsStandard

    使用这2人控件时,属性taborientation设为toleft时有个问题,具体如下设为toleft时tab会跑到左侧,这时的tab上的文字是反的.当设置为toright时,tab在右侧,这时的ta ...

  3. jmeter之--断言json响应&json path espressions的语法

    一.提取所需要断言的内容: 响应数据如下:加入需要提取id为90的值 { , "name" : "python", "url" : &quo ...

  4. 阿里云Redis 配置

    查看路径whereis redis 1.修改配置文件 vim /etc/redis.conf 这三个配置是必须的 修改内容,把 daemonize no 修改为:daemonize yes requi ...

  5. 20175223 MySQL

    目录 完成结果 要求 1 :导入world.sql 要求 2 :CityWanna.java CityWanna.java 要求 3 :CountryWanna.java CountryWanna.j ...

  6. idea 使用github

    [Toc] #一.首先下载github for window 客户端,或者git客户端 这里只演示gitHub客户端,安装git客户端的话,git.exe很容易找得到. 附上网址:https://de ...

  7. ARM 是什么

    ARM Advanced RISC Machines. RISC 就是reduced instruction set computer 精简指令集计算机DSP digtal signal Proces ...

  8. ceph-pg

    版本:mimic https://192.168.1.5:8006/pve-docs/chapter-pveceph.html#pve_ceph_osds As a rule of thumb, fo ...

  9. linux安装相关软件

    XShell上传jdk文件到Linux并安装配置1.yum -y install lrzsz2.sudo rz选文件3.sudo tar -zxvf jdk-8u131-linux-x64.tar.g ...

  10. 使用python实现希尔、计数、基数排序

    希尔排序 希尔排序是一个叫希尔的数学家提出的一种优化版本的插入排序. 首先取一个整数d1=n//2,将元素分为d1个组,每组相邻元素之间的距离为d1,在各组内进行直接插入排序. 取第二个整数d2=d1 ...