NOIp2018集训test-10-17 (bike day3)
发现自己gradully get moodier and moodier了
负面情绪爆发地越来越频繁,根本out of control,莫名其妙地就像着了魔一样
为什么用英语大概是因为今天早上早自习因为英语考了全班倒数被hj抽上黑板去听写了,就很开心
B 君的第一题 (guangzhou)
虽然我完全不知道Bike在说些什么,但是ycl告诉我,因为任何高斯整数都可以这样表达出来,相当于是把高斯整数表示成一个p进制数,每一位是0或者1。然后手写复数类进制转换就好了。
看模p等不等于0可以不用重载模运算,直接看(a+b)%2是否等于0,llj说,因为(-i-1)^2=2i,所以(-i-1)^k一定可以表达成(2i)^k1或者(2i)^k1*(-i-1),这样大概就可以证这个了。
//Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=;
typedef long long LL;
typedef double db;
using namespace std;
int ans[N]; 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;
} struct fs {
LL a,b;
fs(){}
fs(LL a,LL b):a(a),b(b){}
}bs,tp; fs operator *(const fs&A,const fs&B) { return fs(A.a*B.a-A.b*B.b,A.a*B.b+A.b*B.a); }
fs operator /(const fs&A,const LL&B) { return fs(A.a/B,A.b/B); }
fs operator /(const fs&A,const fs&B) { return A*fs(B.a,-B.b)/(B.a*B.a+B.b*B.b); } #define ANS
int main() {
#ifdef ANS
freopen("guangzhou.in","r",stdin);
freopen("guangzhou.out","w",stdout);
#endif
LL a,b;
read(a); read(b);
bs=fs(a,b);
tp=fs(-,-);
for(int i=;(bs.a!=||bs.b!=);i++) {
if((bs.a+bs.b)&) {
ans[++ans[]]=i;
bs.a=bs.a-;
}
bs=bs/tp;
}
printf("%d\n",ans[]);
For(i,,ans[]) printf("%d\n",ans[i]);
Formylove;
}
另外llj告诉了我如何证明任意整数都可以用若干不等的斐波那契数表示,
归纳证明,f[0]~f[i]可以表达1~f[i+1]的所有数,
i=1时成立,
于是f[0]~f[i+1]就可以表达1~f[i+2]所有数
找整数的表达的时候贪心地每次找到小于这个数的最大斐波那契数减去即可,
∵f[i]<=x<f[i+1],∴x-f[i]<f[i-1] 又∵f[0]~f[i-1]可以表达1~f[i]所有数,得证
B 君的第二题 (hangzhou)
条件有a<2333^2
a<2333时就是问长度大于等于2的单调不升子序列的个数,树状数组优化dp即可
n<2333时就是加上限制这个序列中相邻两项的组合数mod2333不等于0,也就是x!/(y!(x-y)!)mod 2333不等于0,∴x/2333=y/2333+(x-y)/2333
n^2dp就可以做75pt了。
x/p=y/p+(x-y)/p 转化成 y mod p + (x-y) mod p < p ∴y mod p <= x mod p
∵y<=x ∴y/p<=x/p
因为当时我太蠢没有想到所以绕了圈子,其实一个lucas定理就直接得出 y/p<=x/p&&y mod p <= x mod p了
然后二维树状数组维护即可。
//Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=+,P=,mod=;
typedef long long LL;
typedef double db;
using namespace std;
int n,a[N];
LL f[N]; 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;
} LL mo(LL x,int p) { return x<?x+p:(x>=p?x-p:x); } LL sum[][];
void add(int x,int y,LL v) {
for(int i=x;i<=P;i+=(i&(-i)))
for(int j=y;j<=P;j+=(j&(-j)))
sum[i][j]=mo(sum[i][j]+v,mod);
} LL qry(int x,int y) {
LL rs=;
for(int i=x;i;i-=(i&(-i)))
for(int j=y;j;j-=(j&(-j)))
rs=mo(rs+sum[i][j],mod);
return rs;
} #define ANS
int main() {
#ifdef ANS
freopen("hangzhou.in","r",stdin);
freopen("hangzhou.out","w",stdout);
#endif
read(n); int mx=;
For(i,,n) {
read(a[i]);
mx=max(mx,a[i]);
}
LL ans=;
For(i,,n) {
int x=P-a[i]/P,y=P-a[i]%P;
f[i]=qry(x,y);
ans=mo(ans+f[i],mod);
f[i]=mo(f[i]+,mod);
add(x,y,f[i]);
}
printf("%lld\n",ans);
Formylove;
}
B 君的第三题 (nanjing)
这好像不是我第一次两个dp能解决的问题前一半用dp后一半写搜索然后TLE了。虽然这次好像后一半我确实也不会写。当然前一半也写得稀丑。
然而bike老爷就非常优秀了——当然像这三道题这种简单的题对于毕老爷都是套路签到水题十分钟就能切完,但对于我这种见识浅薄又愚钝的人来说十分否奥妙和优秀了——先预处理出c[s]表示原图中两端都在s集合里面的边数,用子集和变换就可以处理。
f[k][s]表示s集合形成k个联通块的方案数,先dp出f[1]。
s联通的方案就是总方案数减去不连通的方案,枚举定点所在的联通块来转移就可以了。(我都可以想象到llj说”这不是弱智套路题吗?“时看智障的表情了,真是菜得抠脚)
这里每个集合选择的定点是lowbit。
然后dp出f[2~k],方法类似,对每个集合固定最后一个联通块是lowbit所在的联通块来转移。
//Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=,p=;
typedef long long LL;
typedef double db;
using namespace std;
int n,m,k,pr[N],f[][],c[],ans; 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;
} LL mo(LL x) { return x<?x+p:(x>=p?x-p:x); } #define ANS
int main() {
#ifdef ANS
freopen("nanjing.in","r",stdin);
freopen("nanjing.out","w",stdout);
#endif
pr[]=;
For(i,,) pr[i]=(LL)pr[i-]*%p;
read(n); read(m); read(k);
For(i,,m) {
int x,y;
read(x); read(y);
c[pr[x-]+pr[y-]]++;
}
int up=pr[n]-;
For(i,,n) For(s,,up) if(s&pr[i-])
c[s]=mo((LL)c[s]+c[s^pr[i-]]);
For(s,,up) {
int S=((s-)&s);
LL t=;
for(int ss=S;ss;ss=((ss-)&S))
t=mo(t+(LL)f[][s^ss]*pr[c[ss]]%p);
f[][s]=mo(pr[c[s]]-t);
}
For(t,,k) For(s,,up) {
int S=((s-)&s);
for(int ss=S;ss;ss=((ss-)&S)) {
f[t][s]=mo((LL)f[t][s]+(LL)f[t-][ss]*f[][s^ss]%p);
}
}
printf("%d\n",f[k][up]);
Formylove;
}
NOIp2018集训test-10-17 (bike day3)的更多相关文章
- [NOIP2018模拟赛10.20A]挂分报告
闲扯 先看看了B组,T1 ZROI刚好讲过一个性质原根一般很小的,直接枚举;T2一眼二分然后似乎状压 T3没看 然后上来A组题,T1 flow这名字...网络流?! T1题面非常的社会主义核心价值观, ...
- 背水一战 Windows 10 (17) - 动画: ThemeTransition(过渡效果)
[源码下载] 背水一战 Windows 10 (17) - 动画: ThemeTransition(过渡效果) 作者:webabcd 介绍背水一战 Windows 10 之 动画 ThemeTrans ...
- 发现struct proc_dir_entry内核3.10.17移到internal中去了,倒
struct proc_dir_entry 原:2.6.38.8 在#include <linux/proc_fs.h> 现:3.10.17 在fs/proc/internal.h:str ...
- Windows 8.1 正式版微软官方原版镜像下载(新增10/17新版下载)
中文版:中国区OEM预装版本,特定国家版,锁定语言,其它功能和核心版没有区别.简体中文单语言版:锁定语言,其它功能和核心版没有区别.专业版+核心版[零售版][推荐]:镜像内包含专业版(Professi ...
- Dell Technology Summit(2018.10.17)
时间:2018.10.17地点:北京国家会议中心
- 10.17 NOIP模拟赛
目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...
- WIN8.1 PRO RTM VOL.Enterprise.2013.10.17
Windows 8.1 Pro VL (x64) - DVD (Chinese-Simplified)ISO|Chinese - Simplified|发布日期: 2013/10/17文件名: cn_ ...
- [NOIP2018模拟赛10.16]手残报告
[NOIP2018模拟赛10.16]手残报告 闲扯 炉石乱斗模式美滋滋啊,又颓到好晚... 上来T2先敲了树剖,看T1发现是个思博DP,然后没过大样例,写个暴力发现还是没过大样例!?才发现理解错题意了 ...
- 2020.10.17 JZOJ 提高B组T2 导弹拦截
2020.10.17 JZOJ 提高B组T2 导弹拦截 题目 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统. 敌国的导弹形成了立体打击,每个导弹可以抽象成一个三维空间中的 ...
随机推荐
- python接口自动化(四十二)- 项目结构设计之大结局(超详解)
简介 这一篇主要是将前边的所有知识做一个整合,把各种各样的砖块---模块(post请求,get请求,logging,参数关联,接口封装等等)垒起来,搭建一个房子.并且有很多小伙伴对于接口项目测试的框架 ...
- 小米4s经常断网
https://zhidao.baidu.com/question/1387985910554061020.html
- 【python】-- 类的反射
反射 反射我们以后会经常用到,这个东西实现了动态的装配,通过字符串来反射类中的属性和方法 一.反射函数 1.hasarttr(obj,name_str) 作用:判断一个对象obj中是否有对应的name ...
- SAP初始账号
方法1:有其中某Client的登录帐号1. 用已有帐号登录某个Client2. 运行Tcode SE303. 单击“tips and tricks“按钮4. 在Performance Tips an ...
- centOS-64位通过YUM源安装nginx
第一步:在 /etc/yum.repos.d/ 目录下,建立名叫nginx.repo的软件源配置文件. 文件 nginx.repo 的内容是: [nginx] name=nginx re ...
- MainWindows
开发带有菜单栏状态栏等常用windows应用时候使用
- 【Mybatis】Insert批量操作
话不多说,直接上代码. <insert id="pesistRT" parameterType="com.test.model.RTSummarizer" ...
- shell 日期加减运算
比如今日是2012-04-22 $ date -d "+1 day" +%Y-%m-%d 2012-04-23 $ date -d "-1 day" +%Y ...
- t-sql判断数据库对象是否存在
1 系统表sys.sysobjects 在数据库中创建的每个对象(例如约束.默认值.日志.规则以及存储过程)都对应一行,详细介绍参考MSDN 2 OBJECTPROPERTY 返回当前数据库中架构范围 ...
- pinpoint agent线程模型
pinpoint agent线程模型 以下分析基于pinpoint1.7.1版本 pinpoint agent主要使用到的异步线程有4个 DeadlockMonitorThread : 死锁监测线程, ...