数论/Trie/并查集


猜数

  这题我是这样分析的……

  $a*b=g*l=n=k^2 \ and \ (g|a,g|b) \Rightarrow (g*a')*(g*b' )=g*l=k^2 \\ \Rightarrow a' * b' =\frac{l}{g}=(\frac{k}{g})^2  \Rightarrow min(a'+b')=2* \sqrt{\frac{l}{g}}, max(a'+b')=1+\frac{l}{g}$

  然而算ans的时候还需要再乘g……我给忘了aaarticlea/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDABsSFBcUERsXFhceHBsgKEIrKCUlKFE6PTBCYFVlZF9VXVtqeJmBanGQc1tdhbWGkJ6jq62rZ4C8ybqmx5moq6T/2wBDARweHigjKE4rK06kbl1upKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKT/wAARCAA0ADgDASIAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAAAAUCAwQGAf/EAC4QAAIBAwMDAwMCBwAAAAAAAAECAwAEEQUSIRMiMUFRYRUycQYUI1JygZHB0f/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwBtqeomzMcUUfVnlOESsX1TULNt2oWgEJ8vH6VKbB/VMIfx0jtz7006XVheOdchsgg88UEoJo7iJZYmDI3gira50aQNPj3NqE6JnACcZrPHNdxnNjdSyc/ZNj/tB1VFJLTWZQdl7AUI8lR4/Iq+61u0gO1d8reoQZoGdFYtP1S21AERMQ48o3migwpE1/r7zEkRWhCj5b1p3Sr9NqfpvUb75HZiffmmjEKMk4AoEeqNNLfCNo3MQ+1VbaSR61VDA8qtEf4nH2TJscfg00vujNGrMAoB4kJxtquGWS2nihmdZkk4jk9fxQUx2M5AjlYsMZjlI70PsferNPk6DvbSwKlwBuyvhx8U0rJeWonkjZSySKeHUeB60GC6jj+t2JjUJOdxk2+3zRVeipu1a8aaQyyxnarn2ooLtKf9leT6dKQO4yQ/INM5xvjdAeceKXPpkt2iTXMpW5XlCPCV7DdXtp23sJlUcdWIZP8AcUFNtcXU0ARlt50Pa8QPcKjNbiERvDJLiBg4icenxUhaadfOZlUh2Od8bYOatt9Pusskl27W/oHGW/zQNIpFljV0OVYZFErbY3YDJAJpdCzWFx0iM28jdhGe0+1MiNy4x5oFOlYNwjgdzw5fAxzmivNGikt725glGNo7P6c0UDiiiigx3GnWsxaQxhJMZ3pwaXTzXFrlUuZGA/nwf9UUUGB9SurhJI5JO3g8ADFdVGcxqfiiigyXHbqVqw4LBlPyMUUUUH//2Q==" alt="" />

 //UOJ Easy Round1 A
#include<vector>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std;
typedef long long LL;
const int N=1e5+;
/*******************template********************/ LL n,g,l;
int main(){
#ifndef ONLINE_JUDGE
freopen("A.in","r",stdin);
freopen("A.out","w",stdout);
#endif
int T; scanf("%d",&T);
while(T--){
scanf("%lld%lld",&g,&l);
printf("%lld %lld\n",*(LL)sqrt(l/g)*g,l+g);
}
return ;
}

跳蚤OS

  Trie树+go指针

  所以我们其实只要实现一个沿着Trie树和go指针走的Find函数就可以(找到该字符串在Trie中的实际位置)

  这里需要特判一下根目录,因为只有它一个是以'\'结尾的。

  这个……yy出来以后实现还是比较容易的。

  坑爹的是strlen函数是O(n)的,所以最好拿一个变量来保存这个值。(优化了一下,用时居然rank1了,真是令人感动)

 //UOJ Easy Round1 B
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std;
typedef long long LL;
inline int getint(){
int r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
for(; isdigit(ch);ch=getchar()) v=v*-''+ch;
return r*v;
}
const int N=1e6+;
/*******************template********************/ int c[N][],go[N],fa[N],n,m,tot=;
char s1[N],s2[N],t[N];
inline int id(char ch){
if (ch=='/') return ;
else return ch-'a';
}
int Find(char *s){
int x=,y;
int l=strlen(s);
rep(i,l){
y=id(s[i]);
if (!c[x][y]){
c[x][y]=++tot;
fa[tot]=x;
t[tot]=s[i];
}
x=c[x][y];
if ((s[i+]=='/'||i+==l) && go[x]) x=go[x];
}
return x;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("B.in","r",stdin);
freopen("B.out","w",stdout);
#endif
scanf("%d%d",&n,&m);
F(i,,n){
scanf("%s%s",s1,s2);
int t1=Find(s1),t2=Find(s2);
if (t2==) t2=;
go[t1]=t2;
}
F(i,,m){
scanf("%s",s1);
int num=;
for(int t1=Find(s1);t1!=;t1=fa[t1])
s2[num++]=t[t1];
if (num==) s2[num++]='/';
D(i,num-,) printf("%c",s2[i]); puts("");
}
return ;
}

DZY Loves Graph

  离线模拟+并查集 按秩合并 按size合并

  Orz pyz5715

  虽然题解看懂了,但是并不会写……

  这里是用一个数组记录下来我们每插入一条边,当前的边权和,连通块个数(如果为1则成了一棵树,可以出解了),以及修改了谁的father。

  merge操作就是修改这三个东西……

  考虑Remove,也就是删掉一条边:

  如果最后一次加边并没有修改father,那么直接删就好了……cur--

  否则:我们要将这条边断掉,此时由于我们保存了该时刻的边权和以及连通块个数,所以这些都不用考虑修改……唯一需要重新维护的是每个并查集的rank,这里我一开始yy的修改方式是:将从x到其所在并查集的root的rank都减去rank[x]。然而这样TLE了……FST了最后一个点(非常鬼畜,加一条边,减一条边,加两条边,减两条边……)一开始我以为是需要卡常数,照着神犇的代码一点一点改……然而其实是这里出了问题:每次要将这一条链上的每个点 i 的rank[fa[i]]-=rank[i]。(目前百思不得其解,留一个坑吧)

这里我们离线做,做完一个操作后先读一下,看下下一个操作是不是Remove,如果是就直接执行。(这里我的感觉是为了方便知道要撤销的操作是什么)

UPD:2015年6月24日 09:06:56(Orz zyf)

  其实是由于循环条件写的是i!=fa[i],然后我每次修改的是rank[i]-=rank[x],所以会导致根那个点(i==fa[i])没有修改……改成每次修改rank[fa[i]]-=rank[x]就可以了

 //UOJ Easy Round1 C
//orz pyz5715
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
typedef long long LL;
inline int getint(){
int r=,v=; char ch=getchar();
for(;ch<'' || ch>'';ch=getchar()) if (ch=='-') r=-;
for(;ch>='' && ch<='';ch=getchar()) v=(v<<)+(v<<)-''+ch;
return r*v;
}
const int N=;
/*******************template********************/ int n,m,cur,p[N],fa[N],rank[N],size[N],x,y;
LL w[N];
char cmd; inline int getfa(int x){return fa[x]==x?x:getfa(fa[x]);} inline void Merge(int x,int y,int val){
x=getfa(x), y=getfa(y);
w[++cur]=w[cur-]; p[cur]=;
size[cur]=size[cur-];
if (x==y) return;
if (rank[x]<rank[y]) swap(x,y);
fa[p[cur]=y]=x; rank[x]+=rank[y];
w[cur]+=val; --size[cur];
} inline void Remove(){
int x=p[cur--];
if (x){
for(int i=x;i!=fa[i];i=fa[i])
rank[fa[i]]-=rank[x];
fa[x]=x;
}
}
inline char getc(){
char ch;
while(ch=getchar(),ch< || ch>);
return ch;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("C.in","r",stdin);
freopen("C.out","w",stdout);
#endif
n=getint(); m=getint();
F(i,,n) fa[i]=i,rank[i]=;
size[]=n;
cmd=getc();
F(i,,m){
if (cmd=='A'){
x=getint(),y=getint();
Merge(x,y,i);
printf("%lld\n",size[cur]==?w[cur]:);
if (i!=m && (cmd=getc())=='R') Remove();
}else if (cmd=='D'){
x=getint();
printf("%lld\n",size[cur-x]==?w[cur-x]:);
if (i!=m && (cmd=getc())!='R') while(x--) Remove();
}else{
printf("%lld\n",size[cur]==?w[cur]:);
if (i!=m) cmd=getc();
}
}
return ;
}

【UOJ Easy Round #1】的更多相关文章

  1. 【UOJ Easy Round #2】

    然而UER我也照样跪…… 第一题 忘了取模sad || 操作符将整个区间分成了一些段,每个手机只会执行其中某一段,执行次数为这一段中&&的个数?+1? ans=ans*num[i]+1 ...

  2. UOJ Easy Round#7

    UOJ Easy Round#7 传送门:http://uoj.ac/contest/35 题解:http://matthew99.blog.uoj.ac/blog/2085 #1 题意: 在一个(2 ...

  3. UOJ Easy Round #5

    Preface 本着刷遍(只刷一遍)各大OJ的原则我找到了一场UOJ的比赛 无奈UOJ一般的比赛难度太大,我就精选了UER中最简单的一场打了一下,就当是CSP前的练习吧 A. [UER #5]万圣节的 ...

  4. 【奶昔队ROUND#1】

    奶昔队Round #1 热身 (奶昔队不是真正的队,是群) CodeForces 435C Cardiogram 模拟,不过我做的时候不是模拟,是计算...(写了好久,还wa了几次),现在看了别人的代 ...

  5. 【题解】【LibreOJ Beta Round #5】游戏 LOJ 531 基环树 博弈论

    Prelude 题目链接:萌萌哒传送门♪(^∇^*) Subtask 1 & 2 这是什么鬼题面... 首先要看出,这就是一个基环树博弈. 具体题意:给出一个基环内向树,一个棋子初始在\(1\ ...

  6. 【Educational Codeforces Round 19】

    这场edu蛮简单的…… 连道数据结构题都没有…… A.随便质因数分解凑一下即可. #include<bits/stdc++.h> #define N 100005 using namesp ...

  7. 【Educationcal Codeforces Round 21】

    这场edu我原本以为能清真一点…… 后来发现不仅是七题 还有各种奇奇怪怪的骚操作…… A. 随便枚举 #include<bits/stdc++.h> using namespace std ...

  8. 【Educational Codeforces Round 22】

    又打了一场EDU,感觉这场比23难多了啊…… 艹还是我太弱了. A. 随便贪心一下. #include<bits/stdc++.h> using namespace std; ,ans=- ...

  9. 【Educational Codeforces Round 38】D. Buy a Ticket 堆优化Dijkstra

    题意 给定一张无向图,对每个点$i\in S$求$\min_{j\in S} {2\times d(i,j)+a_j}$ 考虑多源多汇最短路会超时,换个角度考虑每个$j$,如果$j=i$,那么答案为$ ...

随机推荐

  1. 《编写可维护的javascript》读书笔记(上)

    最近在读<编写可维护的javascript>这本书,为了加深记忆,简单做个笔记,同时也让没有读过的同学有一个大概的了解. 一.编程风格 程序是写给人读的,所以一个团队的编程风格要保持一致. ...

  2. 苹果Mac OS 显示隐藏文件

    苹果Mac OS 操作系统下,隐藏文件默认为隐藏状态,隐藏文件是否显示有多种方法可以设置. 方法一: 打开终端,输入命令行 显示Mac隐藏文件的命令: defaults write com.apple ...

  3. 什么情况下,会用到fiddler或者charles?

    有的页面,比如设限制的html页面,比如原生页面,只能在手机APP里面查看,无法在电脑浏览器中打开查看,这时候,需要用fiddler抓包来查看返回数据,定位问题.

  4. BZOJ 4198: [Noi2015]荷马史诗 哈夫曼树 k叉哈夫曼树

    https://www.lydsy.com/JudgeOnline/problem.php?id=4198 https://blog.csdn.net/chn_jz/article/details/7 ...

  5. Javascript:10天设计一门语言

    演进和使用的JavaScript是早在1995年开发的一种语言,真的是刚刚起步. 网景公司在1995年四月聘请Brendan Eich ,他被告知,他有10天时间创造并制作了一种将在Netscape的 ...

  6. BZOJ2612 : [Poi2003]Sums

    设d[i]表示能拼出的x中满足x%a[0]=i的最小的x,其中d[0]=0. 若d[x%a[0]]<=x,则一定可以拼出x,否则一定不可以. 建出带权有向图,点的标号从0到a[0]-1,i号点向 ...

  7. 使用 IntraWeb (16) - 基本控件之 TIWList、TIWListbox、TIWComboBox、TIWOrderedListbox

    TIWList //列表; 它对应 Html 中的 OL.LI(某些选项下会用表格模拟); TIWListbox 和 TIWComboBox 则对应 Html 在的 Option TIWListbox ...

  8. 将网桥的配置写进去/etc/sysconfig/network-scripts/ifcfg-xxx

    有时候需要使用网桥命令比如brctl设置一些网桥的属性,而这些方式能否同样写进去配置文件使其永久开机生效. 答案是不行的,也同样找过Ubuntu的,其实Ubuntu可以实现,参考:http://man ...

  9. @RequestParam @RequestBody @PathVariable 等参数绑定注解详解(转)

    引言: 接上一篇文章,对@RequestMapping进行地址映射讲解之后,该篇主要讲解request 数据到handler method 参数数据的绑定所用到的注解和什么情形下使用: 简介: han ...

  10. OpAmp Voltage Follower/Regulator

    LDO Regulator High accuracy voltage regulator Vout = 2.5V * (1 + ( 5.6 / 6.8 ) ) = 4.55V Recently th ...