NOIp2018集训test-10-15 (bike day1)
B 君的第一题
求斐波那契数列模n的循环节。
1、暴力bsgs,毕姥爷好像说循环节最大是6*n还是多少的,反之比较小,直接bsgs这题是可以过的。但是我非常蠢重载运算符的时候把相等返回成了小于,然后根本把结构体放不进map里去(我以为按道理只有等于的时候会炸,但事实上我根本放不进去啊)。然后改成不小于就可以过这题。
- //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=1e7+;
- typedef long long LL;
- typedef double db;
- using namespace std;
- int T,p,sz=;
- 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 jz {
- LL a[][];
- friend bool operator <(const jz&A,const jz&B) {
- For(i,,) For(j,,) if(A.a[i][j]!=B.a[i][j])
- return A.a[i][j]<B.a[i][j];
- return ;
- }
- friend bool operator ==(const jz&A,const jz&B) {
- return A.a[][]==B.a[][]&&A.a[][]==B.a[][]&&A.a[][]==B.a[][]&&A.a[][]==B.a[][];
- }
- friend jz operator *(const jz&A,const jz&B) {
- jz rs;
- For(i,,) For(j,,) {
- rs.a[i][j]=;
- For(k,,) (rs.a[i][j]+=A.a[i][k]*B.a[k][j]%p)%=p;
- }
- return rs;
- }
- }tp,now,bs;
- map<jz,int>mp;
- void solve() {
- tp.a[][]=,tp.a[][]=,tp.a[][]=,tp.a[][]=;
- bs.a[][]=,bs.a[][]=,bs.a[][]=,bs.a[][]=;
- now=bs;
- mp.clear();
- For(i,,sz) {
- now=now*tp;
- if(!mp[now]) mp[now]=i;
- //cout<<mp[now]<<endl;
- if(now==bs) {
- printf("%d\n",i);
- return;
- }
- }
- jz x=now;
- For(i,,sz) {
- if(mp[x]) {
- LL ans=(LL)i*sz-mp[x];
- if(ans!=) {
- printf("%lld\n",ans);
- return;
- }
- }
- x=x*now;
- }
- }
- #define ANS
- int main() {
- #ifdef ANS
- freopen("shijiazhuang.in","r",stdin);
- freopen("shijiazhuang.out","w",stdout);
- #endif
- read(T);
- while(T--) {
- read(p);
- solve();
- }
- Formylove;
- }
bsgs
2、我最讨厌的斐波那契的一坨性质
- //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 T;
- LL n,p;
- 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 jz {
- LL a[][];
- friend jz operator *(const jz&A,const jz&B) {
- jz rs;
- For(i,,) For(j,,) {
- rs.a[i][j]=;
- For(k,,) (rs.a[i][j]+=A.a[i][k]*B.a[k][j]%p)%=p;
- }
- return rs;
- }
- }bs,rs;
- void jzksm(LL b) {
- rs.a[][]=rs.a[][]=;
- rs.a[][]=rs.a[][]=;
- bs.a[][]=; bs.a[][]=bs.a[][]=bs.a[][]=;
- while(b) {
- if(b&) rs=rs*bs;
- bs=bs*bs;
- b>>=;
- }
- }
- LL ksm(LL a,LL b,LL p) {
- LL rs=,bs=a%p;
- while(b) {
- if(b&) rs=rs*bs%p;
- bs=bs*bs%p;
- b>>=;
- }
- return rs;
- }
- LL gcd(LL a,LL b) { return !b?a:gcd(b,a%b); }
- LL lcm(LL a,LL b) { return a/gcd(a,b)*b; }
- LL solve() {
- if(p==) return ;
- if(p==) return ;
- if(p==) return ;
- LL a;
- if(ksm(,(p-)/,p)==) a=p-;
- else a=(p+)*;
- LL ans=a;
- for(LL x=;x*x<=a;x++) if(a%x==) {
- LL tp=x;
- jzksm(tp);
- if(rs.a[][]==&&rs.a[][]==&&rs.a[][]==&&rs.a[][]==) ans=min(ans,tp);
- tp=a/x;
- jzksm(tp);
- if(rs.a[][]==&&rs.a[][]==&&rs.a[][]==&&rs.a[][]==) ans=min(ans,tp);
- }
- return ans;
- }
- LL work(LL n) {
- if(n==) return ;
- LL tp=n,rs=;
- for(LL x=;x*x<=n;x++) if(tp%x==) {
- LL m=;
- while(tp%x==) {
- tp/=x; m++;
- }
- p=x;
- rs=lcm(rs,solve()*ksm(p,m-,1e18));
- }
- if(tp!=) {
- p=tp;
- rs=lcm(rs,solve());
- }
- return rs;
- }
- #define ANS
- int main() {
- #ifdef ANS
- freopen("shijiazhuang.in","r",stdin);
- freopen("shijiazhuang.out","w",stdout);
- #endif
- read(T);
- For(cs,,T) {
- read(n);
- printf("%lld\n",work(n));
- //printf("Case #%d: %lld\n",cs,work(n));
- }
- Formylove;
- }
B 君的第二题
1、我并没有想到的70分做法,开个堆把1~n的i/1放进去,每次取出最大i/x的然后把i/(x+1)放进堆即可。有人用这个A了这道题我也不知道他是怎么做到的。
2、100分做法,二分答案。二分被选上的最低分数,大于这个分数的都得被选,等于这个分数的可选可不选,判断一下是否合法就好了。
毕姥爷比较优秀用整数二分,我比较菜用实数二分但是过了我也没办法。
- //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=1e5+;
- typedef long long LL;
- typedef double db;
- using namespace std;
- int n,m,ans[N],fl[N];
- db p[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;
- }
- int ck(db pt) {
- LL t1=,t2=;
- For(i,,n) {
- int l=,r=m,rs=;
- while(l<=r) {
- int mid=((l+r)>>);
- if(p[i]>=pt*mid) rs=mid,l=mid+;
- else r=mid-;
- }
- fl[i]=ans[i]=;
- if(rs) {
- if(p[i]==pt*rs) { ans[i]=rs-; fl[i]=; t1+=rs-; t2++; }
- else { ans[i]=rs; t1+=rs; }
- }
- }
- if(m>=t1&&m<=t1+t2) {
- For(i,,n) if(fl[i]&&t1<m) {
- ans[i]++; t1++;
- }
- return ;
- }
- if(m<t1) return -;
- if(m>t1+t2) return ;
- }
- #define ANS
- int main() {
- #ifdef ANS
- freopen("taiyuan.in","r",stdin);
- freopen("taiyuan.out","w",stdout);
- #endif
- read(n); read(m);
- db l=0.0,r=0.0;
- For(i,,n) {
- read(p[i]);
- r=max(r,p[i]);
- }
- for(;;) {
- db mid=(l+r)/2.0;
- if(ck(mid)==) break;
- if(ck(mid)==-) l=mid;
- else r=mid;
- }
- For(i,,n) printf("%d\n",ans[i]);
- Formylove;
- }
B 君的第三题
题目转换为求一点到所有点的切比雪夫距离最小,再转换坐标变成求曼哈顿距离最小。于是x,y分开考虑,每一维取中位数就好了。
然后要求点数,就是中位数围成的矩形中的整点个数。因为现在的坐标转回去的时候是(x+y)/2,(x-y)/,2所以实际上是这个矩形中横轴坐标奇偶相同的整点个数。特判当矩形只剩下一个点,而这个点奇偶不同时,要抖动一下找四周的点作为实际答案。
- //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=1e5+;
- typedef long long LL;
- typedef double db;
- using namespace std;
- int n,anstot;
- LL xx[N],yy[N],ansnum=1e18;
- 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;
- }
- void calc(LL x,LL y) {
- LL rs=;
- For(i,,n)
- rs+=abs(xx[i]-x)+abs(yy[i]-y);
- if(rs<ansnum) ansnum=rs,anstot=;
- else if(rs==ansnum) anstot++;
- }
- LL odd(LL l,LL r) {
- if((l&)&&(r&)) return (r-l+)/;
- else return (r-l+)/;
- }
- LL even(LL l,LL r) {
- if(!(l&)&&!(r&)) return (r-l+)/;
- else return (r-l+)/;
- }
- void solve(LL xl,LL xr,LL yl,LL yr) {
- if(xl==xr&&yl==yr&&(xl+yl)%!=) {
- calc(xl-,yl);
- calc(xl+,yl);
- calc(xl,yl-);
- calc(xl,yl+);
- }
- else {
- calc(xl,yl);
- anstot=odd(xl,xr)*odd(yl,yr)+even(xl,xr)*even(yl,yr);
- }
- }
- #define ANS
- int main() {
- #ifdef ANS
- freopen("zhengzhou.in","r",stdin);
- freopen("zhengzhou.out","w",stdout);
- #endif
- read(n);
- For(i,,n) {
- LL x,y;
- read(x); read(y);
- xx[i]=x+y;
- yy[i]=x-y;
- }
- sort(xx+,xx+n+);
- sort(yy+,yy+n+);
- solve(xx[(n+)/],xx[(n+)/],yy[(n+)/],yy[(n+)/]);
- printf("%lld\n%d\n",ansnum/,anstot);
- Formylove;
- }
其实我特别后悔当年第一次见到毕姥爷之后没有立刻退役。
要是人生重来,不学OI了,也不学理了,我就想安安静静地当个文科生。说实话我对史地都挺感兴趣的,政治无感但好歹是我高一学得最好的每次月考帮我拉分的一个科目,而理化生,抱歉半毛钱兴趣都没有,如果不是竞赛应该会认真考虑读文吧。虽然读文好像不能学计算机了,那就不学了吧,大概多读书多到处走以后当个写东西的,这样的人生可能更适合我?
我邪在沙海说过里有一句话
对于弱者的帮助有时候只能让他变得更弱,在这个社会里,在自己不擅长的行业被淘汰,有时候是一种幸运,你可以去寻找真正适合自己的生活,而帮助弱者,把他们在自己不擅长的行业中抬到一个太高的位置,往往会让他们死无葬身之地。
这一次无论能走到哪里,都是最后一次了,我未来再不会碰算法竞赛相关了。忘了从哪听到的一句话大概是“所有的热爱最终都变成执念”,我现在在干的事情已经完全脱离我的初衷了,我和之前的我状态完全不一样了。而且我更是清晰且悲哀地认识到,竞赛可能真的并不适合我。当然,不适合和不做是两码事,于是现在OI对于我已经从目的变成仅仅手段了,这有违我的初心,是我所不喜欢的,也是让现在的我难受的,但是我没有别的办法。现在的我能做的只有尽我所能地去做我能做到的所有事情。
NOIp2018集训test-10-15 (bike day1)的更多相关文章
- NOIp2018集训test-10-21 (联考六day1)
今天被高一狂踩,两个手抖,t1一个1写成2,t3一个+=写成=,所谓失之毫厘谬以千里,直接丢了50分. 完全背包 看到背包体积如此之大物品体积如此之小容易很想到贪心,肯定要先加很多很多的性价比最高的最 ...
- NOIp2018集训test-9-15(联考二day1)
T1.矩阵游戏 水题.每一行最后乘的数为x[i],每一列为y[i],暴力算第一行的列的贡献,每一行的列的贡献是公差为所有列的贡献之和的等差数列,然后每一行再乘上行的贡献求和即为答案. //Achen ...
- [NOIP2018模拟赛10.16]手残报告
[NOIP2018模拟赛10.16]手残报告 闲扯 炉石乱斗模式美滋滋啊,又颓到好晚... 上来T2先敲了树剖,看T1发现是个思博DP,然后没过大样例,写个暴力发现还是没过大样例!?才发现理解错题意了 ...
- 背水一战 Windows 10 (15) - 动画: 缓动动画
[源码下载] 背水一战 Windows 10 (15) - 动画: 缓动动画 作者:webabcd 介绍背水一战 Windows 10 之 动画 缓动动画 - easing 示例演示缓动(easing ...
- Linux Kernel 3.11.4/3.10.15/3.4.65/3.0.99
Linux 今天又发布了4个更新版本,分别是: 3.11.4 2013-10-05 [tar.xz] [pgp] [patch] [view patch] [view inc] [cgit] [cha ...
- CVE-2015-1328 Ubuntu 12.04, 14.04, 14.10, 15.04 overlayfs Local Root
catalog . 引言 . Description . Effected Scope . Exploit Analysis . Principle Of Vulnerability . Patch ...
- WTL汉化版2013.10.15
汉化内容: 2013.10.15 版本:当前可下载Trunk最新版,wtl-code-467-trunk.zip 汉化内容: 1.应用向导的部分汉化,考虑到部分词汇的表述问题,只汉化无影响部分 2.资 ...
- [Mon Feb 10 15:21:06 2014] [notice] child pid 7101 exit signal File size limit exceeded (25)
今天遇到的问题: LAMP的LOG里报如下错误. 然后IE和FIREFOX里显示连接被重置或是无法访问. 但自己建一个正常的PHP测试探针倒可以. 原来是PHP错误日志太多,无法写入LOG导致. [r ...
- Datatables插件1.10.15版本服务器处理模式ajax获取分页数据实例解析
一.问题描述 前端需要使用表格来展示数据,找了一些插件,最后确定使用dataTables组件来做. 后端的分页接口已经写好了,不能修改.接口需要传入页码(pageNumber)和页面显示数据条数(pa ...
- macOS 10.15 开启 HiDPI
普通的显示,接上 MacBook 发现原生的分辨率设置在 2K 显示器上字体很小,换成 1080P 分辨率显示效果又特别模糊.下面介绍MacBook强行开启 HiDPI. 什么是 HiDPI 它使用横 ...
随机推荐
- 控制台Cannot read property 'disabled' of null报错的问题
点击任何东西控制台都会报错: 也没有提示哪儿出了问题,后来我就代码一块一块的注释,终于找到了原因. 我在项目中用了 el-dropdown ,但是没有用他的el-dropdown-menu 所以才会一 ...
- PHP 的 new static 和 new self
下面我们举个例子: class Father { public static function getSelf() { return new self(); } public static funct ...
- Express post请求无法解析参数的原因
router.post('/', function(req, res) { console.log(req.body); console.log(req.body.name); console.log ...
- 运行go代码
go运行go代码 现在,让我们通过创建一个简单的示例,开启我们的go学习旅程,并学习如何编译和执行go程序.打开你最喜欢的文本编辑器,输入以下代码: package main func main() ...
- luoguP2148 [SDOI2009]E&D [sg函数][组合游戏]
题目描述 小E 与小W 进行一项名为“E&D”游戏. 游戏的规则如下: 桌子上有2n 堆石子,编号为1..2n.其中,为了方便起见,我们将第2k-1 堆与第2k 堆 (1 ≤ k ≤ n)视为 ...
- Andrdoid中对应用程序的行为拦截实现方式之----从底层C进行拦截
之前的一篇概要文章中主要说了我这次研究的一些具体情况,这里就不在多说了,但是这里还需要指出的是,感谢一下三位大神愿意分享的知识(在我看来,懂得分享和细致的人才算是大神,不一定是技术牛奥~~) 第一篇: ...
- [Catalan数三连]网格&有趣的数列&树屋阶梯
如何让孩子爱上打表 Catalan数 Catalan数是组合数学中一个常出现在各种计数问题中的数列. 以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名. 先丢个公式(设第n项为$ ...
- 【C#技术】一篇文章搞掂:LLBL
公司代码速查 ParameterBase.CurrentUser.UserId ICustomerDeskDetailManager customerDeskDetailManager = Clien ...
- OS: 生产者消费者问题(二) ---- 系统V IPC通信-信号量和共享内存
在上一篇“OS: 生产者消费者问题(多进程+共享内存+信号量)”中提到的方法二: 如果进程之间并没有父子关系,但是协商好了共享存储的 KEY , 那么在每个进程中,就可以通过 KEY 以及 shmge ...
- project的操作说明
project 1 操作的步骤 设定一个起始时间:7月1号 安排好摘要(任务)的先后顺序 一个一个任务的来:A任务,下面有几个分布实现的部门: 设计部门 3个工作日 程序部门 1个工作日.然后配置相互 ...