Preface

感觉这次的题目是真的太水了,可能是为了让我们涨一波信心的吧。

不过最后一题没有想到那种玄学做法还是太菜了,还是要一波姿势的啊。


交换

一道入门难度题,根据排序不等式(又或是简单推导可以发现直接把一个数换到它该去的地方是肯定不会更差的。

因此我们直接模拟交换的过程即可,复杂度\(O(n)\)

CODE

#include<cstdio>
#include<cctype>
using namespace std;
const int N=1000005;
int n,a[N],id[N],ans;
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=0; char ch; while (!isdigit(ch=tc()));
while (x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=tc()));
}
inline void swap(int &a,int &b)
{
int t=a; a=b; b=t;
}
int main()
{
freopen("swap.in","r",stdin); freopen("swap.out","w",stdout);
register int i; read(n);
for (i=1;i<=n;++i)
read(a[i]),id[a[i]]=i;
for (i=1;i<=n;++i)
if (a[i]^i) id[a[i]]=id[i],swap(a[i],a[id[i]]),id[i]=i,++ans;
return printf("%d",ans),0;
}

兔子抓狼

首先分析对于狼来说什么情况是最优的

如果一只兔子可以炸到它,那么它迟早会被这只兔子给炸了,否则兔子会一直保持在它的右边。

因此,我们分析出,狼直接走回家是对于它来说最好的选择

然后就很简单了,我们再来考虑兔子,由于如果一只兔子可以在狼回家的路上炸到狼,我们为了简化问题假定让兔子全部跑到狼的家门口去炸它。

这样我们对于所有兔子到达狼的家的距离开一个维护一下,然后每次取出堆顶判断是否可以炸到狼即可

CODE

#include<cstdio>
#include<cctype>
#include<queue>
#include<cmath>
using namespace std;
typedef double DB;
const int N=500005,tar=10000000;
int n,ans,x,y,t,tot;
priority_queue < DB,vector<DB>,greater<DB> > small;
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=0; char ch; int flag=1; while (!isdigit(ch=tc())) flag=ch^'-'?1:-1;
while (x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=tc())); x*=flag;
}
int main()
{
freopen("rabbit.in","r",stdin); freopen("rabbit.out","w",stdout);
register int i; read(n); read(t);
for (i=1;i<=n;++i)
read(x),read(y),small.push((DB)sqrt(1LL*(x-tar)*(x-tar)+1LL*y*y));
while (!small.empty())
if (small.top()<=(DB)tar+tot) tot+=t,++ans,small.pop(); else break;
return printf("%d",ans),0;
}

魔法

首先你要知道一个东西:01Trie

这个很简单,想当于建出一棵树,每一个节点都是一个0/1值。从根出发的某条路径上的点代表的就是一个二进制下的数

然后我们发现这个东西就可以很好的处理xor了

我们先把所有的点插入0/1Trie中,每一次查询的时候相当与询问大于等于一个数的两数xor值。

我们同时跳两条链,每次判断当前节点的值是否小于所求的点,若是则这两点必然异位

统计的时候也有个小Trick,分成一段一段来搞又快又方便

CODE

#include<cstdio>
#include<cctype>
using namespace std;
typedef long long LL;
const int N=50005,P=60;
struct Trie
{
int ch[2],size;
}node[N*P];
int n,tot=1; LL x,ans,s=1;
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=0; char ch; while (!isdigit(ch=getchar()));
while (x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=getchar()));
}
inline void read(LL &x)
{
x=0; char ch; while (!isdigit(ch=getchar()));
while (x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=getchar()));
}
inline void insert(LL x,int &now,int d)
{
if (!now) now=++tot; ++node[now].size;
if (!(~d)) return;
if (x&(1LL<<d)) insert(x,node[now].ch[1],d-1); else insert(x,node[now].ch[0],d-1);
}
inline void query(int x,int y,LL s,int d)
{
if (!x||!y) return; if ((1LL<<d+1)<=s) return;
if ((1LL<<d)>=s)
{
ans+=1LL*node[node[x].ch[0]].size*node[node[y].ch[1]].size+1LL*node[node[x].ch[1]].size*node[node[y].ch[0]].size;
query(node[x].ch[0],node[y].ch[0],s,d-1); query(node[x].ch[1],node[y].ch[1],s,d-1);
} else query(node[x].ch[0],node[y].ch[1],s-(1LL<<d),d-1),query(node[x].ch[1],node[y].ch[0],s-(1LL<<d),d-1);
}
int main()
{
freopen("magic.in","r",stdin); freopen("magic.out","w",stdout);
register int i; read(n);
for (i=1;i<=n;++i)
{
read(x); int now=1; insert(x,now,P-1);
}
for (i=1;i<=19;++i,s*=10) query(1,1,s,P-1);
return printf("%lld",ans>>1),0;
}

绍一集训Round#2的更多相关文章

  1. 绍一集训Round#1

    到了之后看题,T1一看发现真熟悉,和之前做的一道题真的像,然后内心: 这里是绍一啊,不可能就出这么简单的题 我题意没理解错啊,这不是单独计算每条边的贡献么 维护一个人数的大小,然后直接搞一波就可以了吧 ...

  2. 2018年山东省省队集训 Round 1 Day 2简要题解

    从这里开始 Problem A 生日礼物 Problem B 咕咕 Problem C 解决npc (相信来看这篇博客的人都有题面) T2以为可以线性递推,然后花了两个小时.然后想了两个小时T1,会了 ...

  3. ZZUACM 2015 暑假集训 round 01

    A. Encoding Problem Description Given a string containing only 'A' - 'Z', we could encode it using t ...

  4. 「山东省队集训2021 Round 1」 半夜

    考虑将 \(X\) 复制一次放到后面再对其长度为 \(n\) 的连续子串和 \(Y\) 求一波 \(\rm{Longest\ Common\ Subsequence}\) 就能得到 \(\Theta( ...

  5. [日常] NOIP前集训日记

    写点流水账放松身心... 10.8 前一天考完NHEEE的一调考试终于可以开始集训了Orz (然后上来考试就迟到5min, GG) T1维护队列瞎贪心, 过了大样例交上去一点也不稳...T出翔只拿了5 ...

  6. 路飞学城-Python开发集训-第3章

    学习心得: 通过这一章的作业,使我对正则表达式的使用直接提升了一个level,虽然作业完成的不怎么样,重复代码有点多,但是收获还是非常大的,有点找到写代码的感觉了,遗憾的是,这次作业交过,这次集训就结 ...

  7. PKUWC2019 Round 2 没去祭

    因为今年有两场 PKUWC,所以叫 PKUWC2019 Round 2. 因为一些沙雕原因,今年去不了了. Day 0 一如既往,没有集训就去上数学课,今天讲几何变换,一如既往的只会说"少女 ...

  8. 2019暑期金华集训 Day6 杂题选讲

    自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\ ...

  9. QDEZ集训笔记【更新中】

    这是一个绝妙的比喻,如果青岛二中的台阶上每级站一只平度一中的猫,差不多站满了吧 自己的理解 [2016-12-31] [主席树] http://www.cnblogs.com/candy99/p/61 ...

随机推荐

  1. Modo教程合集44部

    Modo教程合集44部 教程说明:英文视频教程,大部分有工程文件,但不是全部 教程格式:Flv.MP4格式,大部分高清,确保能看清软件上的文字 发货方式:百度网盘下载链接(教程较多,可转存到自己的网盘 ...

  2. [20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED.txt

    [20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED.txt --//简单探究12c TABLE ACCESS BY INDEX ROWID BATCHE ...

  3. Vue延迟点击

    从点击屏幕上的元素到触发元素的 click 事件,移动浏览器会有大约 300 毫秒的等待时间 fastclick清除点击延迟,让程序更灵敏 1.导出fastclick import Vue from ...

  4. ALSA声卡驱动的DAPM(一)-DPAM详解

    最近使用tinymix 调试相应的音频通道,但是一直不知道音频通道的原理是什么.所以百度了一下,百度结果是与DPAM有关. 一.DAPM简介: DAPM是Dynamic Audio Power Man ...

  5. Pandas:让你像写SQL一样做数据分析

    1. 引言 Pandas是一个开源的Python数据分析库.Pandas把结构化数据分为了三类: Series,1维序列,可视作为没有column名的.只有一个column的DataFrame: Da ...

  6. windows系统安装python3.6.3和python3.7.0

    一.装备好从官网下载的python软件包(3.6.3和3.7.0) 二.先安装python3.6.3 1.运行python3.6.3文件 2.选择默认 3.下一步,等待安装 4.检查是否安装成功 ,安 ...

  7. 八皇后问题的Python实现和C#实现

    看到八皇后问题的解决思路, 感觉很喜欢. 我用C#实现的版本之前贴在了百度百科上(https://baike.baidu.com/item/%E5%85%AB%E7%9A%87%E5%90%8E%E9 ...

  8. Python3编写网络爬虫08-数据存储方式一-文件存储

    数据存储 用解析器解析出数据之后,就是存储数据了.保存的形式可以多种多样,最简单的形式是直接保存为文本文件,如TXT JSON CSV等.另外还可以保存到数据库中,如关系型数据库MySQL 非关系型数 ...

  9. pyspider爬一批文章保存到word中

    最近一直在爬新闻,对于新闻爬取的套路还是比较熟悉的.一个群友发布了一个爬文章入word的任务,我果断接单,自我挑战一下,更何况完成任务还有赏金,哈哈. 任务大概是这样的,有一个文章列表[http:// ...

  10. iOS更新惹怒高通:苹果太可耻!

    之前高通同时在德国.中国发起对苹果的专利诉讼,而他们都赢得了最终的胜利,其中包含iPhone 7.8以及X系列机型,统统在禁售机型当中. 从法院公布的细节看,高通对iPhone禁售的理由是,iOS系统 ...