既然考这么差就来写题啦OTZ


T1 猜结论?猜nm!

一直到考试结束都没猜出来=。=我就好奇别人如何猜出来的

我们来说DP(from ZBK)

设\(dp[i][j]\)表示胜or负

那我们来看一下代码:

#include<bits/stdc++.h>
#define R register int
using namespace std;
const int N=1000;
bool dp[N+10][N+10];
signed main(){
for(R i=1;i<=N;i++) dp[i][1]=!(i&1);//靠着边界走状态是可以确定的
for(R j=1;j<=N;j++) dp[1][j]=!(j&1);
for(R i=2;i<=N;i++) for(R j=2;j<=N;j++)
dp[i][j]=!(dp[i][j-1]&dp[i-1][j]&dp[i-1][j-1]);//之前的存在必败态,就是必胜态
R n,m; while(scanf("%d%d",&n,&m),n!=0&&m!=0)
puts(dp[n][m]?"Yuri":"Chito");
return 0;
}
/* code from ZBK */

这**不就是SG函数吗???

我咋就没有推DP呐??DAG上DP呐??

qwq

T2 1.25e9跑过1.x s

这是暴力。

但他过了(-O2)。

先二分一下答案 \(O(nlog^2n)\) ,然后暴力统计 \(O(n^2)\) 。

#include<bits/stdc++.h>
#define int ll
#define ll long long
#define R register int
using namespace std;
namespace Luitaryi {
inline int g() { R x=0;
register char ch; while(!isdigit(ch=getchar()));
do x=x*10+(ch^48); while(isdigit(ch=getchar())); return x;
} const int N=50010,L=31,M=1e9+7;
int n,k,a[N],tot,lim; ll ans;
int t[N*L][2],sz[N*L];
inline void ins(int x) { R now=0;
for(R i=lim;~i;--i) { R ch=(x>>i)&1;
if(!t[now][ch]) t[now][ch]=++tot;
now=t[now][ch],++sz[now];
}
}
inline int ask(int x,int y) { R now=0,ret=0;
for(R i=lim;~i;--i) { R ch=(x>>i)&1,c=(y>>i)&1;
if(!c&&t[now][ch^1]) ret+=sz[t[now][ch^1]];
if(t[now][ch^c]) now=t[now][ch^c];
else break;
} return ret;
}
inline bool ck(int x) { R cnt=0;
for(R i=1;i<=n;++i) cnt+=ask(a[i],x); return cnt<k;//
}
inline void main() {
n=g(),k=g()*2; for(R i=1;i<=n;++i) a[i]=g();
sort(a+1,a+n+1); lim=log2(a[n]);
for(R i=1;i<=n;++i) ins(a[i]);
R l=0,r=(1ll<<31)-1; while(l<r) {
R md=l+r>>1; if(ck(md)) r=md; else l=md+1;
} k/=2;
for(R i=1;i<=n;++i) for(R j=i+1;j<=n;++j) { R tmp=a[i]^a[j];
if(tmp>l) ans+=tmp,--k;
} printf("%d\n",(ans+1ll*k*l)%M);
}
} signed main() {Luitaryi::main(); return 0;}

T3 脑子是个好东西

考试时:额?\(K\leq 10\)

????

管他呢,先打暴力(还有45min)

最后获得30分的好成绩

第二天改了改暴力成功通过 \(O(n^2)\) 模拟+线段树最大值+静态区间第k大主席树拿到了 70 分。

然后看到了\(K \leq 10\)

????

!!!!

ffff%^&@#@&(*

一个线段树,每个点维护区间前十大就好了,合并时双指针,\(O(knlogn)\)

#include<bits/stdc++.h>
#define R register int
using namespace std;
namespace Luitaryi {
inline int g() { R x=0;
register char ch; while(!isdigit(ch=getchar()));
do x=x*10+(ch^48); while(isdigit(ch=getchar())); return x;
} const int N=100010,K=10,SZ=40;
int n,m,tg[N<<2];
#define ls (tr<<1)
#define rs (tr<<1|1)
struct node {
int mem[K]; node() {memset(mem,0,40);}
node operator + (const node& that) const {
register node ret; R p1=0,p2=0; for(R i=0;i<K;++i)
if(mem[p1]>that.mem[p2]) ret.mem[i]=mem[p1++];
else ret.mem[i]=that.mem[p2++];
return ret;
}
} sum[N<<2];
#define mem(i) sum[tr].mem[i]
inline void cov(int tr,int d) {tg[tr]+=d; for(R i=0;i<K;++i) if(mem(i)) mem(i)+=d;}
inline void spread(int tr) {cov(ls,tg[tr]),cov(rs,tg[tr]),tg[tr]=0;}
inline void build(int tr,int l,int r) {
if(l==r) {mem(0)=g(); return ;} R md=l+r>>1;
build(ls,l,md),build(rs,md+1,r); sum[tr]=sum[ls]+sum[rs];
}
inline void change(int tr,int l,int r,int LL,int RR,int d) {
if(LL<=l&&r<=RR) return (void) cov(tr,d); if(tg[tr]) spread(tr); R md=l+r>>1;
if(LL<=md) change(ls,l,md,LL,RR,d); if(RR>md) change(rs,md+1,r,LL,RR,d);
sum[tr]=sum[ls]+sum[rs];
}
inline node query(int tr,int l,int r,int LL,int RR) {
if(LL<=l&&r<=RR) return sum[tr]; if(tg[tr]) spread(tr);
R md=l+r>>1; register node ret;
if(LL<=md) ret=ret+query(ls,l,md,LL,RR);
if(RR>md) ret=ret+query(rs,md+1,r,LL,RR);
return ret;
}
inline void main() {
n=g(),m=g(); build(1,1,n); for(R i=1;i<=m;++i) {
R op=g(),l=g(),r=g(),d=g();
if(op&1) change(1,1,n,l,r,d);
else if(r-l+1<d) puts("-1");
else printf("%d\n",query(1,1,n,l,r).mem[d-1]);
}
}
} signed main() {Luitaryi::main(); return 0;}

T4 爆搜

没有看T4

结束前刘队说这不是爆搜吗?

一脸懵逼.jpg

第二天

????

真实爆搜

显然对于连通块一定是一个环或者一颗树,如果是环显然只能一个点取左右两条边,ans*2;要是一棵树那么总有一个点是没有被分配边的,ans*size.

#include<bits/stdc++.h>
#define ll long long
#define R register int
using namespace std;
namespace Luitaryi {
inline int g() { R x=0,f=1;
register char ch; while(!isdigit(ch=getchar())) f=ch=='-'?-1:f;
do x=x*10+(ch^48); while(isdigit(ch=getchar())); return x*f;
} const int N=100010,M=1e9+7;
int n,m,size,cnt; bool flg,vis[N]; ll ans=1;
int vr[N<<1],nxt[N<<1],fir[N];
inline void add(int u,int v) {
vr[++cnt]=v,nxt[cnt]=fir[u],fir[u]=cnt;
vr[++cnt]=u,nxt[cnt]=fir[v],fir[v]=cnt;
}
inline void dfs(int u,int fa) { vis[u]=true,++size;
for(R i=fir[u];i;i=nxt[i]) { R v=vr[i];
if(v==fa) continue; if(vis[v]) {
flg=true; continue;
} dfs(v,u);
}
}
inline void main() {
n=g(),m=g(); for(R i=1,u,v;i<=m;++i) u=g(),v=g(),add(u,v);
for(R i=1;i<=n;++i) if(!vis[i]) {
flg=false,size=0; dfs(i,0);
if(flg) ans=ans*2%M; else ans=ans*size%M;
} printf("%d\n",ans);
}
} signed main() {Luitaryi::main(); return 0;}

总结:

不要死扣,灵活点。

难以不降智。

降智时不要考试要不难受好几天=。=

HR#4 题解的更多相关文章

  1. HR#7 题解

    T1 签到题 #include<bits/stdc++.h> #define R register int using namespace std; inline int g() { R ...

  2. HR# 5题解

    T1 我傻了 前20个数暴力开桶记录,后面的每次暴力统计. #include<bits/stdc++.h> #define R register int using namespace s ...

  3. JSOI Round 2题解

    强行一波题解骗一个访问量好了... http://blog.csdn.net/yanqval/article/details/51457302 http://absi2011.is-programme ...

  4. 【AtCoder】AGC023 A-F题解

    可以说是第一场AGC了,做了三道题之后还有30min,杠了一下D题发现杠不出来,三题滚粗了 rating起步1300+,感觉还是很菜... 只有三题水平显然以后还会疯狂--啊(CF的惨痛经历) 改题的 ...

  5. CODEVS——T 3736 【HR】万花丛中2

    http://codevs.cn/problem/3736/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description ...

  6. 3736 【HR】万花丛中2

    3736 [HR]万花丛中2  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description HR神犇在成功攻略ZX后,花心 ...

  7. [NOIP补坑计划]NOIP2017 题解&做题心得

    终于做完了…… 场上预计得分:?(省一分数线:295) 由于看过部分题解所以没有预计得分qwq 题解: D1T1 小凯的疑惑 题面 震惊!一道小学奥数题竟难倒无数高中考生! 欢迎大家以各种姿势*和谐* ...

  8. 题解 P3693 【琪露诺的冰雪小屋】

    知识点: 模拟 , 信仰 原题面 大 型 车 万 众 自 裁 现 场 分析题意: 操作: ICE_BARRAGE R C D S R:行 , C:列, D:方向 , S:强度 在(R,C) 向 D 射 ...

  9. Vulnhub靶场题解

    Vulnhub简介 Vulnhub是一个提供各种漏洞环境的靶场平台,供安全爱好者学习渗透使用,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者VirtualBox运行 ...

随机推荐

  1. Mysql主从复制原理及同步延迟问题

    本文转载自:Mysql主从复制原理及同步延迟问题 主从复制解决的问题 数据分布:通过复制将数据分布到不同地理位置 负载均衡:读写分离以及将读负载到多台从库 备份:可作为实时备份 高可用性:利用主主复制 ...

  2. WUSTOJ 1291: 2n皇后问题(Java)

    题目:

  3. 应用人员反馈报错,ORA-03137: TTC protocol internal error : [12333]

    一.报错现象 应用人员反馈连接不上数据库,连接报错. 我们使用PLSQL发现可以连接数据库,但是数据库DB Alert存在如下报错信息 DB AlertFri Oct :: Errors ): ORA ...

  4. SpinWait

    其实SpinWait的code 非常简单,以前看过很多遍,但是从来都没有整理过,整理也是再次学习吧. 我们先看看SpinWait的一些评论或者注意点吧:如果等待某个条件满足需要的时间很短,而且不希望发 ...

  5. 自动化测试之if __name__ == '__main__'未运行

    自动化测试之if __name__ == '__main__'未运行 添加Count类 calculator.py: class Count: def __init__(self,a,b): self ...

  6. 十大经典排序【Java实现,手工作坊式】

    终于把排序这个硬骨头,但是又很基础的知识点,自己手撕了一遍!之前,使用Python看着算法导论的书手撕过一遍,印象不是很深刻,容易忘记!好记性不如烂笔头!多自己思考解决问题 1,交换类CAS[最简单] ...

  7. Quartz.net任务调度(石英钟定时任务)

    好了,现在具体来说一下怎么使用Quartz.net 2.0. 1.到网上下载Quartz.net 2.0,下载完后解压,里面有vs.net2008和vs.net2010两个版本. 2.新建一个空项目, ...

  8. JS 长按 移动端

    实质上,长按的时间不应该过长,因为这有可能与手机系统的部分长按手势产生冲突,但也不宜过短,因为长按时间过短与点击没有任何区别, 理论上,判断长按结束,在手机端上仅设置mouseup动作就可以, < ...

  9. JDBC 复习5 mysql 的自增长主键 auto_increment

    MySQL 自增长主键 (1)如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号.编号从1开始,并1为基数递增. (2)把0插入AUTO_INCRE ...

  10. S2-019、S2-020

    前言 “Struts2系列起始篇”是我整各系列的核心,希望大家能花些时间先看看. 正文 我发现关于一些早期的Struts2的漏洞,网上的分析文章并不多,不知道是不是我打开浏览器的方式不对,唯一看到的两 ...