发现自己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)的更多相关文章

  1. [NOIP2018模拟赛10.20A]挂分报告

    闲扯 先看看了B组,T1 ZROI刚好讲过一个性质原根一般很小的,直接枚举;T2一眼二分然后似乎状压 T3没看 然后上来A组题,T1 flow这名字...网络流?! T1题面非常的社会主义核心价值观, ...

  2. 背水一战 Windows 10 (17) - 动画: ThemeTransition(过渡效果)

    [源码下载] 背水一战 Windows 10 (17) - 动画: ThemeTransition(过渡效果) 作者:webabcd 介绍背水一战 Windows 10 之 动画 ThemeTrans ...

  3. 发现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 ...

  4. Windows 8.1 正式版微软官方原版镜像下载(新增10/17新版下载)

    中文版:中国区OEM预装版本,特定国家版,锁定语言,其它功能和核心版没有区别.简体中文单语言版:锁定语言,其它功能和核心版没有区别.专业版+核心版[零售版][推荐]:镜像内包含专业版(Professi ...

  5. Dell Technology Summit(2018.10.17)

    时间:2018.10.17地点:北京国家会议中心

  6. 10.17 NOIP模拟赛

    目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...

  7. 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_ ...

  8. [NOIP2018模拟赛10.16]手残报告

    [NOIP2018模拟赛10.16]手残报告 闲扯 炉石乱斗模式美滋滋啊,又颓到好晚... 上来T2先敲了树剖,看T1发现是个思博DP,然后没过大样例,写个暴力发现还是没过大样例!?才发现理解错题意了 ...

  9. 2020.10.17 JZOJ 提高B组T2 导弹拦截

    2020.10.17 JZOJ 提高B组T2 导弹拦截 题目 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统. 敌国的导弹形成了立体打击,每个导弹可以抽象成一个三维空间中的 ...

随机推荐

  1. apple-touch-icon-precomposed 和 apple-touch-icon属性区别

    苹果safari浏览器当中apple-touch-icon-precomposed 和 apple-touch-icon属性是有区别的,之前在网上查了下相关的资料和苹果的开发文档手册,对这两中属性区别 ...

  2. extendgcd模板

    看了数论第一章,终于搞懂了扩展欧几里德,其实就是普通欧几里德的逆推过程. // ax+by = gcd(a,b) ->求解x,y 其中a,b不全为0,可以为负数// 复杂度:O(log2a)vo ...

  3. Linux环境安装Nginx详细步骤

    1.yum解决编译nginx所需的依赖包,之后你的nginx就不会报错了yum install gcc patch libffi-devel python-devel  zlib-devel bzip ...

  4. Tensorflow官方文档中文版——第二章(瞎奖杯写)

    包含如下几个部分: 1.面向机器学习初学者的 MNIST 初级教程 2.面向机器学习专家的 MNIST 高级教程 3.TensorFlow 使用指南 4.卷积神经网络 5.单词的向量表示(word e ...

  5. oldboyshell编程扩展内容

    oldboyshell编程扩展内容一.命令的优先级 命令分为: ==> alias ==> Compound Commands ==> function  ==> build_ ...

  6. 利用CocoaPods管理本地工程和发布开源框架

    发布自己三方框架 发布云端库 1.创建spec pod spec create xxx 2.编辑spec s.name:名称,pod search 搜索的关键词,注意这里一定要和.podspec的名称 ...

  7. hadoop 根据secondary namenode恢复namenode

    refer to http://www.cnblogs.com/Richardzhu/p/3435989.html http://blog.csdn.net/wuzhilon88/article/de ...

  8. Javamail 发送附件中文名过长以及乱码问题

      最近在弄javamail发送邮件当邮件里含有附件并且附件是中文的时候发送后就会出现乱码!! 通过javax.mail.internet.MimeUtility.encodeText()就可解决这个 ...

  9. es5严格模式简谈

    一.用法: 在全局或局部开头加上“use strict”即可 就是一行字符串,不会对不兼容严格模式的浏览器产生影响.二.不再兼容es3的一些不规则语法.使用全新的es5规范.三.两种用法: 全局严格模 ...

  10. Vim 标签定义

    一.单个文件: m+标记字符 打上标记,如在开头行按ms(start),标记开头: 如需返回到自己的标记点,按`+标记字符就行: 二.多个文件: m+大写标记字符 如果删除了标签的行,同时也删除了标签 ...