1、最大值

可以用FWT水过去,李巨写了FWT结果中途爆int了炸了几十分好像。

我乱搞了一下把除了大数据有or的搞出来然后90,还是蛮划算的。我yy的做法:

1、xor 字典树上贪心, 一开始我打了线性基,被自己蠢哭了。

&和|

用sum[i]表示i中二进制位为1的位置都是1的且不是i的数是否存在。我乱搞从大到小地把一个一个去掉处理的,FWT也可以处理这个,复杂度是一样的。

2、&

  答案一定是a中的某个数,枚举a中的每个数a[i]看sum[a[i]]是否存在即可。

3、|

  枚举a中每个数,从高位到低位贪心看它能|出来的最大数。用一个类似前缀和思想的限制,具体说,到某一位如果a[i]是0,看目前的限制|这一位的1的sum存不存在,存在就把目前的限制|这一位的1。

 //Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define Formylove return 0
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=1e5+;
typedef long long LL;
typedef double db;
using namespace std;
int T,n,c,a[N],mxx,b[],sum[],cnt[]; 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;
} int rt,ch[N*][],tot;
void insert(int v) {
int x=rt;
For(i,,) {
int c=((v&(<<i))!=);
if(!ch[x][c]) {
ch[x][c]=++tot;
ch[tot][]=ch[tot][]=;
}
x=ch[x][c];
}
} int qry(int v) {
int x=rt,rs=;
For(i,,) {
if(v&(<<i)) {
if(ch[x][]) rs+=(<<i),x=ch[x][];
else x=ch[x][];
}
else {
if(ch[x][]) rs+=(<<i),x=ch[x][];
else x=ch[x][];
}
}
return rs;
} #define ANS
int main() {
#ifdef ANS
freopen("maximum.in","r",stdin);
freopen("maximum.out","w",stdout);
#endif
read(T);
while(T--) {
read(n); read(c);
For(i,,n) { read(a[i]); if(a[i]>mxx) mxx=a[i]; }
if(n<=) {
int ans=;
For(i,,n) For(j,i+,n) {
if(c==) ans=max(ans,(a[i]&a[j]));
else if(c==) ans=max(ans,(a[i]^a[j]));
else ans=max(ans,(a[i]|a[j]));
}
printf("%d\n",ans);
}
else if(mxx<=) {
int ans=;
For(i,,) cnt[i]=;
For(i,,n) cnt[a[i]]++;
For(i,,) if(cnt[i]) {
if(cnt[i]>=) {
if(c==) ans=max(ans,(i&i));
else if(c==) ans=max(ans,(i^i));
else ans=max(ans,(i|i));
}
For(j,i+,) if(cnt[j]) {
if(c==) ans=max(ans,(i&j));
else if(c==) ans=max(ans,(i^j));
else ans=max(ans,(i|j));
}
}
printf("%d\n",ans);
}
else {
if(c!=) {
memset(cnt,,sizeof(cnt));
memset(sum,,sizeof(sum));
int up=mxx;
For(i,,n) {
cnt[a[i]]++;
For(j,,) if(a[i]&(<<j))
sum[a[i]^(<<j)]=;
}
Rep(i,up,) if(sum[i]) {
For(j,,) if(i&(<<j))
sum[i^(<<j)]=;
}
}
if(c==) { //&
int ans=;
For(i,,n) if(cnt[a[i]]>=||sum[a[i]]) {
if(a[i]>ans) ans=a[i];
}
printf("%d\n",ans);
}
else if(c==) { //^
int rs=;
ch[rt][]=ch[rt][]=;
For(i,,n) insert(a[i]);
For(i,,n) rs=max(rs,qry(a[i]));
printf("%d\n",rs);
}
else { // |
int ans=;
For(i,,n) {
int pr=;
Rep(j,,) if(!(i&(<<j))) {
if(sum[pr|(<<j)]||cnt[pr|(<<j)]) pr|=(<<j);
}
ans=max(ans,(a[i]|pr));
}
printf("%d\n",ans);
}
}
}
Formylove;
}

2、独木桥

之前考过的题啊。二分套二分。

老张给的大数据有毒,大数据给错了,害我调了1个小时。。。

 //Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define Formylove return 0
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=2e5+;
typedef long long LL;
typedef double db;
using namespace std;
int n,m,d;
int px[N],rak[N],p[N],lp[N],rp[N],mi,mx; 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;
} int find(int ti,int pos) {
int rs=;
int l=,r=lp[],tp=-;
while(l<=r) {
int mid=((l+r)>>);
if(lp[mid]-ti<=pos) tp=mid,l=mid+;
else r=mid-;
}
if(tp!=-) rs+=tp;
l=,r=rp[],tp=-;
while(l<=r) {
int mid=((l+r)>>);
if(rp[mid]+ti<=pos) tp=mid,l=mid+;
else r=mid-;
}
if(tp!=-) rs+=tp;
return rs;
} #define ANS
int main() {
#ifdef ANS
freopen("bridge.in","r",stdin);
freopen("bridge.out","w",stdout);
#endif
read(n);
For(i,,n) read(p[i]),px[i]=p[i];
sort(px+,px+n+);
For(i,,n) rak[i]=lower_bound(px+,px+n+,p[i])-px;
For(i,,n) {
read(d);
if(d) rp[++rp[]]=p[i];
else lp[++lp[]]=p[i];
mi=min(mi,p[i]); mx=max(mx,p[i]);
}
sort(rp+,rp+rp[]+);
sort(lp+,lp+lp[]+);
read(m);
For(i,,m) {
int ti,k;
read(k); k++; read(ti);
k=rak[k];
int l=mi-ti,r=mx+ti,rs=-;
while(l<=r) {
int mid=(((LL)l+r)/);
if(find(ti,mid)>=k) rs=mid,r=mid-;
else l=mid+;
}
printf("%d\n",rs);
}
Formylove;
}
/*
5
8 7 8 1 4
0 1 1 0 1
5
5 11
*/

3、分组

把s从小到大排序,一个个考虑放进组中,这样可以保证新建组的时候放入的一定是组内最小数,结束一个组的时候放入的一定是组内最大数。

f[i][j][c]表示前i个数都分进了组,现在还有j个组没有结束,目前的代价是c的方案数。这样就可以过$\sum s_i < 1000$的点了。

算代价的时候是分别在最小的地方-s[i]和在最大的地方+s[i],显然代价单调不减,也就是虽然某个地方可能代价-s[i]但是后面一定会把这个代价加到非负。所以c一维最大只会到k。

虽然最大只会到k,但是最小可以小到非常小,所以这种算代价的方式不太优秀。利用差分的思想,$s_i-s_j=\sum_{k=j}^{k<i}s_{k+1}-s_k$,这样就可以使代价始终为正,把第三维压到k了。

 //Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define Formylove return 0
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int p=1e9+;
typedef long long LL;
typedef double db;
using namespace std;
int n,k,s[];
LL f[][][],cf[]; 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("group.in","r",stdin);
freopen("group.out","w",stdout);
#endif
read(n); read(k);
For(i,,n) read(s[i]);
sort(s+,s+n+);
For(i,,n) cf[i]=s[i+]-s[i];
int o=;
f[o][][]=;
For(i,,n-) {
o^=;
memset(f[o],,sizeof(f[o]));
For(j,,i) For(c,,k) if(f[o^][j][c]) {
if(c+cf[i]*j<=k) {
(f[o][j][c+cf[i]*j]+=f[o^][j][c]*(j+)%p)%=p;
if(j) (f[o][j-][c+cf[i]*j]+=(f[o^][j][c]*j%p))%=p;
(f[o][j+][c+cf[i]*j]+=f[o^][j][c])%=p;
}
}
}
LL ans=;
For(i,,k)
(ans+=f[o][][i])%=p;
printf("%lld\n",ans);
Formylove;
}

NOIp2018集训test-9-1(am)的更多相关文章

  1. NOIp2018集训test-10-24(am&pm)

    李巨连续AK三场了,我跟南瓜打赌李巨连续AK七场,南瓜赌李巨连续AK五场. DAY1 T1 qu 按题意拿stack,queue和priority_que模拟即可.特判没有元素却要取出的情况. T2 ...

  2. NOIP2018 集训(三)

    A题 Tree 问题描述 给定一颗 \(n\) 个点的树,树边带权,试求一个排列 \(P\) ,使下式的值最大 \[\sum_{i=1}^{n-1} maxflow(P_i, P_{i+1}) \] ...

  3. NOIP2018 集训(二)

    A题 神炎皇 问题描述 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对 \((a,b)\) ,若满足 \(a+b\leq n\) 且 \(a+b\) 是 \(ab\) 的因子,则称 为神 ...

  4. NOIP2018 集训(一)

    A题 Simple 时间限制:1000ms | 空间限制:256MB 问题描述 对于给定正整数\(n,m\),我们称正整数\(c\)为好的,当且仅当存在非负整数\(x,y\)使得\(n×x+m×y=c ...

  5. NOIp2018集训test-10-18 (bike day4)

    这是一套简单题,这几天的考试让bike老爷感觉很绝望,说实话我也确实不知道还能怎么更简单了. 这几天的题换做llj.sxy应该都能轻松AK吧,至少随便考个250+应该不是问题吧,我越来越觉得觉得我跟他 ...

  6. NOIp2018集训test-10-17 (bike day3)

    发现自己gradully get moodier and moodier了 负面情绪爆发地越来越频繁,根本out of control,莫名其妙地就像着了魔一样 为什么用英语大概是因为今天早上早自习因 ...

  7. NOIp2018集训test-10-16 (bike day2)

    “毕姥爷:今天的题好简单啊,你们怎么考得这么烂啊,如果是noip你们就凉透了啊“ 今天的题难度应该是3.2.1递减的,但是我不知道哪根筋没搭对,平时我最多1h多就弃题了,今天硬生生写了2h20min的 ...

  8. [雅礼NOIP2018集训] day6

    打满暴力好像是一种挑战,已经连续几天考试最后一个小时自闭了,因为自以为打完了暴力,然而,结果往往差强人意 大概是考试的策略有些问题 T1: 我们设$g[x]$为在x时取小于等于m个物品的最大价值,下面 ...

  9. [雅礼NOIP2018集训 day4]

    感觉状态极差啊,今天居然爆零了 主要是以下原因: 1.又是T1看错题肝了两个小时,发现题意理解错误瞬间心态爆炸 2.T2交错了文件名 3.T3暴力子任务和正解(假的)混在一起,输出了两个答案 都想为自 ...

  10. [雅礼NOIP2018集训 day1]

    现在才来填坑,之后还要陆续补其他几天的,可能前几天真的太颓了 T1: 题目大意:给定一个长度为n的序列,m次询问每次询问给出l,r,询问区间l到r的元素在模k意义下的最大值 数据范围当然是你暴力写不过 ...

随机推荐

  1. 【luoguP4768】【NOI2018】归程

    description 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 nn 个节点.mm 条边的无向连通图(节点的编号从 11 至 nn).我们依次用 l,a ...

  2. mac终端命令--自动补全

    1.打开nano编辑器 输入命令 nano .inputrc,回车,打开nano编辑器 2.在nano编辑器中输入如下命令: set completion-ignore-case on set sho ...

  3. thinkphp 图形处理

    使用Think\Image类进行图像处理功能,支持Gd库和Imagick库,包括对GIf图像处理的支持. 实例化类库 $image = new \Think\Image(); 默认使用GD库进行图像操 ...

  4. 电脑U盘启动制作

    1.用老毛桃.大白菜制作U盘驱动时,不要直接默认一键制作.不然安装的系统会植入第三方的软件的.一定要进行个性化设置中取消赞助商.

  5. PC 端响应式布局

    前言:PC端 电脑显示器的尺寸种类还是很多的,台式电脑和笔记本电脑尺寸相差就更明显,所以响应式布局还是很重要的,甚至是必须要考虑的. 响应式的页面好不好,在后管平台上很明显.因为后管平台,一般是全屏显 ...

  6. thinkphp5.1调用七牛云SDK上传文件

    thinkphp5.0 class Upload { public static function image(){ if(empty($_FILES['file']['tmp_name'])){ e ...

  7. Java-Class-@I:java.annotation.Resource

    ylbtech-Java-Class-@I:java.annotation.Resource 1.返回顶部   2.返回顶部 1.1. import javax.annotation.Resource ...

  8. CSS:CSS 字体

    ylbtech-CSS:CSS 字体 1.返回顶部 1. CSS 字体 CSS字体属性定义字体,加粗,大小,文字样式. serif和sans-serif字体之间的区别  在计算机屏幕上,sans-se ...

  9. 6-23 EDM的报告

    EDM营销(Email Direct Marketing)也即:Email营销. 目的:数据分析.制定一对一的个性化数据.提高用户访问率.EDM是一对一的沟通,让你的用户感觉到尊重, 方式:选择强有力 ...

  10. Zabbix 历史数据存储到 Elasticsearch

    Zabbix 历史数据存储到 Elasticsearch Zabbix 3.4.6 版本开始支持历史数据存储到 Elasticsearch, 早就想测试这个功能,最近有个需求需保存 zabbix 的历 ...