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. 【leetcode】969. Pancake Sorting

    题目如下: Given an array A, we can perform a pancake flip: We choose some positive integer k <= A.len ...

  2. table响应式设计

    table不可用flex布局和td宽度的自适应. table外层加div.mml-table设置overflow-x:auto可以添加横向滚动条.

  3. onethink后台代码简单分析(1)

    onethink后台的入口页面同样是Index/index控制器 首先,Index继承了AdminController,AdminController有一个_initialize函数,这是所有后台运行 ...

  4. STM32嵌入式开发学习笔记(一)

    本文中,笔者将介绍使用嵌入式开发工具Keil uVision5,使用C语言,对微处理器STM32F103C8进行嵌入式开发. 开发使用C语言,首先需要新建一个C语言文件,将其设为主函数的入口,因此,将 ...

  5. NYOJ 301 递推求值

    第一次写博客,拿个矩阵快速幂练练手吧. 首先什么是快速幂,快速幂是让复杂度由线性降为log n的算法,比如8^1024次方暴力要算1024次,但是矩阵快速幂只算10次就好. 此题只不过是把快速幂的底数 ...

  6. CSS:CSS 布局 - 水平 & 垂直对齐

    ylbtech-CSS:CSS 布局 - 水平 & 垂直对齐 1.返回顶部 1. CSS 布局 - 水平 & 垂直对齐 水平 & 垂直居中对齐 元素居中对齐 要水平居中对齐一个 ...

  7. 4. Python数据类型之数字、字符串、列表

    开发过程中,我们需要处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定义不同的数据类型.在Python中,能够直接处理的数据类型主要有以下几种:数字.字符串.列表.元组.字典.集合等 ...

  8. 18、Linux命令对服务器CPU进行监控

    我刚开始做性能测试的时候,什么也不懂,就只知道压测.什么时候把系统压瘫痪什么时候结束.但是系统因为什么瘫痪却不是很清楚,后来开始研究服务器性能监控,运用到工作中,提高了不少生产力,下面就把我常用的命令 ...

  9. GF学习未解之谜

    1.很奇怪事件管理器里面的用到的订阅事件里面的ID是通过typeof(xxx).GetHashCode()得到的,怎么解决id重复的问题? 2.log系统里面是不是直接全部当做多参数解决问题比较好?

  10. WPF 3D

    参考MSDN内容:http://msdn.microsoft.com/zh-cn/library/ms747437(v=vs.110).aspx 概述 WPF使用Viewport3D元素,将三维场景显 ...