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 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统. 敌国的导弹形成了立体打击,每个导弹可以抽象成一个三维空间中的 ...
随机推荐
- CentOS升级Python2.6到Python2.7
个人博客:https://blog.sharedata.info/ 貌似CentOS 6.X系统默认安装的Python都是2.6版本的?平时使用以及很多的库都是要求用到2.7版本或以上,所以新系统要做 ...
- iOS-Core-Animation-Advanced-Techniques(二)
本文转载至 http://www.cocoachina.com/ios/20150104/10816.html 视觉效果和变换 (四)视觉效果 嗯,园和椭圆还不错,但如果是带圆角的矩形呢? 我们现在能 ...
- Jmeter 03 Jmeter脚本开发
JMeter 工作区介绍 JMeter Http 协议录制 JMeter 脚本调测 JMeter 关联 JMeter 参数化 JMeter 检查点 JMeter 事务 JMeter 集合点 JMete ...
- 【python】-- 类的装饰器方法、特殊成员方法
装饰器方法 类的另外的特性,装饰器方法:静态方法(staticmethod).类方法(classmethod).属性方法(property) 一.静态方法 在方法名前加上@staticmethod装饰 ...
- Ext.Ajax的用法
Ext.Ajax.request({ //ajax请求 url: 'Accou ...
- 安装Eclipsemaven插件
Maven的Eclipse插件m2eclipse的安装 The goal of the m2ec project is to provide a first-class Apache Maven su ...
- 全栈JavaScript之路( 二十四 )DOM2、DOM3, 不涉及XML命名空间的扩展
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/hatmore/article/details/37658167 (一)DocumentType 类型 ...
- ARDUINO解析GPS数据,读取出来GPRMC帧数据
测试板子使用ARDUINO MEGA2560 #include <TimerOne.h> #define GPSSerial Serial1 #define DebugSerial Ser ...
- Shell中的while循环
while循环的格式 while expression do command command ``` done 1.计数器控制的while循环 主要用于已经准确知道要输入的数据和字符串的数目 ...
- 每天一个Linux命令(11)nl命令
nl命令读取 file 参数(缺省情况下标准输入),计算输入中的行号,将计算过的行号写入标准输出. 其默认的结果与cat -n有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 ...