A.几何冲刺

感觉自己的智商爆炸。

显然是按照极角序排列之后依次加点,判断是否有点。

保证一个点在两个角的范围内就OK了啊,想了半天叉积。。。

#include "triangles.h"
#include <bits/stdc++.h>
#define for1(a,b,i) for(int i=a,end_=b;i<=end_;++i)
#define FOR2(a,b,i) for(int i=a,end_=b;i>=end_;--i)
using namespace std;
typedef long long ll;
#define M 20005struct node {int id,x,y;double c;inline bool operator <(const node &a) const {return c<a.c;}
}a[M];const double pi=acos(-1);void check_triangles(int n,int m,int *ax,int *ay,int *bx,int *by,int **f) {for1(1,n,i) a[i]=(node){i,ax[i-1],ay[i-1]};for1(1,m,i) a[i+n]=(node){i+n,bx[i-1],by[i-1]};for1(1,n+m,i) a[i].c=atan2(a[i].y,a[i].x);sort(a+1,a+n+m+1);for1(1,n+m,i) a[n+m+i]=a[i],a[n+m+i].c+=2*pi;int tot=2*(n+m);for1(1,n,i) for1(i+1,n,j) f[i-1][j-1]=-1;for(int l=1;l<=n+m;++l) {while (l<=n+m&&a[l].id>n) ++l;if(l>n+m) break;bool t=a[l].c<0;int pos=l,Max_pos=-1;double num=a[l].c+pi,Max=-1e18;while (pos<tot&&a[pos+1].c<num) {++pos;//这里可以改成向量会快很多double x=atan2(a[pos].y-a[l].y,a[pos].x-a[l].x);if(!t&&x<0) x+=2*pi;if(a[pos].id>n) {if(x>Max) {Max=x;Max_pos=a[pos].id-n-1;}}else {if(x<Max) {int x_[2]={a[l].id,a[pos].id};if(x_[0]>x_[1]) swap(x_[0],x_[1]);f[x_[0]-1][x_[1]-1]=Max_pos;}}}}
}

View Code

B.去月球

感觉我写的hash+线段树做法挺显然的吧,$O(m*log^2n)$。

然后优化就可以用后缀自动机搞个$O(1)$lca就OK了,但是太码农了,没写。

myy的思路非常6。

考虑建出一个trie树,表示$[1,i]$的消除完之后的序列。

然后$dis(pos[l-1],pos[r])$就是不能得到的点的个数。

证明的话就是我们考虑在$pos[l-1]$后加上$[l,r]$消除完的区间。

和$[1,l-1]$内配对的点是一个前缀,对应了走到lca,之后对应了走到pos[r]。

很巧妙了,$O(n*logn+m*logn)$。

#include <bits/stdc++.h>
#include "mythological.h"
#define for1(a,b,i) for(int i=a,end_=b;i<=end_;++i)
#define FOR2(a,b,i) for(int i=a,end_=b;i>=end_;--i)
using namespace std;
typedef long long ll;#define M 200005
int n;
int a[M],pos[M];
int dep[M],fa[M][20];
map <int,int> cc[M];inline int Lca(int x,int y) {if(dep[x]<dep[y]) swap(x,y);FOR2(16,0,i) if(dep[fa[x][i]]>=dep[y]) x=fa[x][i];if(x==y) return x;FOR2(16,0,i) if(fa[x][i]!=fa[y][i]) x=fa[x][i],y=fa[y][i];return fa[x][0];
}int query(int l,int r) {--l;return r-l-dep[pos[l]]-dep[pos[r]]+2*dep[Lca(pos[l],pos[r])];
}void init(int n_,int _,int s_[],int t) {n=n_;for1(1,n,i) a[i]=s_[i];int cur=0;for1(1,n,i) {if(a[i]==a[cur]) cur=fa[cur][0];else {if(cc[cur].count(a[i])) cur=cc[cur][a[i]];else cc[cur][a[i]]=i,fa[i][0]=cur,cur=i;}pos[i]=cur;}for1(1,n,i) dep[i]=dep[fa[i][0]]+1;for1(1,16,i) for1(1,n,j) fa[j][i]=fa[fa[j][i-1]][i-1];
}

View Code

 C.量子破碎

fwt的应用。

$cnt(x\&pos)+cnt(y\&pos)=cnt(x\&y\&pos)$

fwt之后pos点不为0的条件就是上面的式子为偶数。

然后直接check解就好了。

#include <bits/stdc++.h>
#include "quantumbreak.h"
#define for1(a,b,i) for(int i=a,end_=b;i<=end_;++i)
#define FOR2(a,b,i) for(int i=a,end_=b;i>=end_;--i)
using namespace std;
typedef long long ll;
inline int read() {int f=1,sum=0;char x=getchar();for(;(x<'0'||x>'9');x=getchar()) if(x=='-') f=-1;for(;x>='0'&&x<='9';x=getchar()) sum=sum*10+x-'0';return f*sum;
}const int M=(1<<20)+5;
int ans[M];
double a[2][2];
const double c=1/sqrt(2);int query_xor(int n,int t) {int cnt=(1<<n)-1;for1(1,(1<<n)-1,i) ans[i]=i;for1(0,1,i) for1(0,1,j) a[i][j]=c;a[1][1]=-c;while (cnt>1) {FOR2(n,1,i) manipulate(a,i-1);int tot=0;int pos=query();for1(1,cnt,i) if(__builtin_parity(ans[i]&pos)==0) ans[++tot]=ans[i];cnt=tot; }return ans[1];
}

View Code

转载于:https://www.cnblogs.com/asd123www/p/9904302.html

UOJ Test Round 3相关推荐

  1. UOJ Test Round 1

    第一题: 题目大意: 给出N个字符串,字符串的前面部分都是字母且都是一样的,后面部分是数字,按照后面的数字排序.N<=10000 解题过程: 1.第一题是真良心,一开始的做法是把后面的数字分离出 ...

  2. UOJ Easy Round #8 T1 打雪仗 题解

    题目链接: [UER #8]打雪仗 第一次做通信题,写篇\(blog\)加深印象. 首先分析题目,根据数据,最坏情况下\(m\approx \frac23n\) 刚开始时想着把进制压到更高进制输出,不 ...

  3. UOJ Rounds

    UOJ Test Round #1 T1:数字比大小的本质是按(长度,字典序)比大小. T2:首先发现单调性,二分答案,用堆模拟,$O(n\log^2 n)$. 第二个log已经没有什么可优化的了,但 ...

  4. 【长更】一句话题解(各大oj)

      太简单的题,但是又要记录下来做过哪些东西,就写在这里啦~   早搞不搞,等到快退役了才来搞   标 * 的为有价值的题,标 ^ 的为欺诈题,标 - 的为知识点待填坑,标 ? 的表示看别人是这样做的 ...

  5. [日常] NOI前划水日记

    NOI前划水日记 开坑记录一下每天的效率有多低 5.24 早上被春哥安排了一场NEERC(不过怎么是qualification round啊) 省队势力都跑去参加THU/PKU夏令营了...剩下四个D ...

  6. 半小时写完替罪羊重构点分树做动态动态点分治之紫荆花之恋的wyy贴心指导

    刷题训练 初学者 有一定语言基础,但是不了解算法竞赛,水平在联赛一等奖以下的. 参考书:<算法竞赛入门经典--刘汝佳>,<算法竞赛入门经典训练指南--刘汝佳> 题库:洛谷(历年 ...

  7. UOJ Round #20 T1 A. 【UR #20】跳蚤电话(组合数+树形DP)

    UOJ Round #20 T1 A. [UR #20]跳蚤电话 题目大意 给出一棵树,求建出该树的不同操作方案数.建树方式如下:初始 S S S集合只有 1 1 1,操作 1 1 1为取已连的边 x ...

  8. UOJ Round #4 题解

    A 设 f [ i ] [ j ] f[i][j] f[i][j] 表示 a = i , b = j a=i,b=j a=i,b=j 时必胜还是必败,然后做个 d p dp dp 即可. 由于只有当 ...

  9. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

最新文章

  1. php pthread 实例,php 真正的多线程 pthread
  2. iOS学习笔记16-SQLite应用
  3. IOS开发基础知识--碎片32
  4. redis 安装-配置
  5. 第十一章:【UCHome二次开发】功能修改
  6. 将python代码编译成.so文件
  7. Java枚举getDeclaringClass()方法与示例
  8. Go底层剖析 | 好书中秋赠送中
  9. app个人健康管理系统开源_开源会促进心理健康吗?
  10. 数据库选型入门必读:如何在眼花缭乱的产品中挑出最适合业务的?
  11. git reset --mixed, - soft和--hard有什么区别?
  12. 语音包mp3_目标明确,为运动而造 ,自带MP3功能的南卡RUNNER PRO骨传导耳机
  13. 多项目同时进行 如何高效协作?
  14. java拦截器要怎么写_SpringMVC中的拦截器详解及代码示例
  15. UVA ~ 816 ~ Abbott's Revenge (BFS + 打印路径)
  16. GitHub Windows桌面版 中文汉化
  17. 1427: 数字转换
  18. 计算机文档我的文档丢失,我的文档不见了
  19. Java筑基10-封装继承多态(重点)
  20. linux mysql 邮件_linux中mysql 自动备份发邮件 到指定邮箱代码

热门文章

  1. 关于小程序的一些坑的总结
  2. javascript动态创建table
  3. PIL简单图片处理(上)
  4. HW--漂亮度2(测试通过)
  5. RSS你会用了吗?答曰:不会
  6. Lecture 13 Amortized Analysis
  7. 写给Java开发者看的JavaScript对象机制
  8. 第一阶段:前端开发_Mysql——表与表之间的关系
  9. css 属性选择器笔记
  10. MVC3.0+DWZ探索