文章目录

  • 0【NOIP2013模拟联考3】库特的向量(code)
  • 1 【NOIP2013模拟联考3】恭介的法则(rule)
  • 2 【NOIP2013模拟联考3】沙耶的玩偶(doll)
  • 开门那一瞬,阳光照在你的身上

0【NOIP2013模拟联考3】库特的向量(code)

从前在一个美好的校园里,有一只(棵)可爱的弯枝理树。她内敛而羞涩,一副弱气的样子让人一看就想好好疼爱她。仅仅在她身边,就有许多女孩子想和她BH,比如铃,库特,等等。不过,除却巫山不是云,理树的心理只有那个帅气高大的男孩子——恭介,这让女孩子们不得不终日唉声叹气,以泪洗面。不过恭介是那样强大而完美,根本没有办法击败他,她们也只好咬牙忍痛度日,以待反击之时。

终于,她们获得了一次机会。机智的库特利用弹道学、密码学、宇宙学的知识设计出了一个密室,可以让进入的人无法从内部打开出口。库特设计密码的过程很奇葩,是由两个用整数坐标表示的n 维向量导出的。神奇的是,对于这两个向量中的任意一个,无论如何将它的坐标打乱(例如(a1,a2,a3)变成(a3,a1,a2)),打乱后的数量积都不会比原来的两个向量的数量积小。而库特就把原来的两个向量的数量积作为了密码。现在她们只用把恭介引入就可以了。但是,好事多磨,由于她们的粗心大意,在测试密室的时候不小心把自己给关了进去,而且还带走了密码纸。在外面的铃只找到了库特写着两个打乱后的向量的草稿。哇呼~能不能解救这些萌妹子,就看你了。

对于50%的数据 n<=8 , |ai|,|bi|<=1000

对于100%的数据 n<=1000, |ai|,|bi|<=100000


向量a: ( a 1 , a 2 , a 3 , . . . , a n ) (a_1,a_2,a_3,...,a_n) (a1​,a2​,a3​,...,an​),向量b: ( b 1 , b 2 , b 3 , . . . , b n ) (b_1,b_2,b_3,...,b_n) (b1​,b2​,b3​,...,bn​)
两个n维向量的数量积: ( a 1 b 1 + a 2 b 2 + a 3 b a 3 + . . . + a n b n ) (a_1b_1+a_2b_2+a_3b_a3+...+a_nb_n) (a1​b1​+a2​b2​+a3​ba​3+...+an​bn​)

然后这题求最小的向量积,那就把两个向量中最小的坐标和最大的坐标乘
就 a i a_i ai​和 b i b_i bi​分别排序,一个升序另一个降序,然后按顺序乘

那么除了要开long long 就没有任何要注意的地方了

#include <cstdio>
#include <algorithm> using namespace std;int n;
long long ans;
int a[1005],b[1005];bool comp(int a,int b){return a>b;
}int main(){scanf("%d",&n);for (int i=1;i<=n;i++)scanf("%d",&a[i]);sort(a+1,a+1+n);for (int i=1;i<=n;i++)scanf("%d",&b[i]);sort(b+1,b+1+n,comp);for (int i=1;i<=n;i++)ans=(long long)a[i]*b[i]+ans;printf("%lld",ans);
}

1 【NOIP2013模拟联考3】恭介的法则(rule)

终于,在众亲们的奋斗下,最终boss 恭介被关进了库特设计的密室。正当她们松了一口气时,这个世界却发生了天翻覆地的变化:地面开始下沉,天空开始变成血红色,海水沸腾……一幅世界末日的图景。美鱼从她手中的古籍《若山牧水诗歌集》中发现了原因:白鸟は かなしからずや 空の青 海のあをにも 染まずただよふ 。大(xia)意(shuo)就是狡猾的恭介在创造这个世界的时候就篡改了法则。而这个法则的起源,就是一只生死之间的猫。这个猫被关在一个黑盒子里,盒子里有两个毒气罐,如果有任意一个毒气罐被打开那么猫将会被杀死,法则也能得到纠正。然而外界能控制的仅仅是这两个毒气罐被打开的概率。假设第一个毒气罐被打开的概率为1/x,第二个毒气罐为1/y(x,y 为正整数),那么当两个概率和为1/(n!)时,猫将会被莫名其妙地杀死。现在美鱼想知道,有多少对(x,y)可以让猫被莫名其妙杀死。

对于30%的数据 n<=6

对于60%的数据 n<=50

对于100%的数据 n<=700000


对题目大意总结,得要求有多少对 ( x , y ) (x,y) (x,y)满足 1 / x + 1 / y = 1 / ( n ! ) 1/x+1/y=1/(n!) 1/x+1/y=1/(n!)
对式子进行通分,得 ( x + y ) / x y = 1 / ( n ! ) (x+y)/xy=1/(n!) (x+y)/xy=1/(n!)
然后分数运算,得 ( x + y ) n ! = x y (x+y)n!=xy (x+y)n!=xy
把括号拆开,得 x n ! + y n ! = x y xn!+yn!=xy xn!+yn!=xy
把y放到同一边,得 x n ! = x y − n ! y xn!=xy-n!y xn!=xy−n!y
把y提出来,得 x n ! = y ( x − n ! ) xn!=y(x-n!) xn!=y(x−n!)
把(x-n!)除到左边,得 x n ! / ( x − n ! ) = y xn!/(x-n!)=y xn!/(x−n!)=y

由x,y是正整数得 x n ! &gt; = ( x − n ! ) &gt; = 1 xn!&gt;=(x-n!)&gt;=1 xn!>=(x−n!)>=1,则必有 x &gt; n ! x&gt;n! x>n!
这时设 x = n ! + k x=n!+k x=n!+k, k k k为任意整数,则原始等于 ( n ! + k ) n ! / ( n ! + k − n ! ) = y (n!+k)n!/(n!+k-n!)=y (n!+k)n!/(n!+k−n!)=y
然后 ( n ! 2 + k n ! ) / k = y (n!^2+kn!)/k=y (n!2+kn!)/k=y
把括号拆开,得 n ! 2 / k + n ! = y n!^2/k+n!=y n!2/k+n!=y
由y是正整数得 k ∣ n ! 2 k|n!^2 k∣n!2
题目顺利转化为 n ! 2 n!^2 n!2有多少个不同约数

设 n ! 2 = ( p 1 a 1 ∗ p 2 a 2 ∗ . . . ∗ p k a k ) 2 n!^2=(p_1^{a_1}*p_2^{a_2}*...*p_k^{a_k})^2 n!2=(p1a1​​∗p2a2​​∗...∗pkak​​)2,其中 q i q_i qi​为质因子, a i a_i ai​为每个质因子的指数
那么就有 n ! 2 n!^2 n!2的约数个数为 ( a 1 ∗ 2 + 1 ) ∗ ( a 2 ∗ 2 + 1 ) ∗ . . . ∗ ( a k ∗ 2 + 1 ) (a_1*2+1)*(a_2*2+1)*...*(a_k*2+1) (a1​∗2+1)∗(a2​∗2+1)∗...∗(ak​∗2+1)
可以理解为对于一个质因子 p i p_i pi​,可以选0个,选2个,…,选 a i ∗ 2 a_i*2 ai​∗2个

哇这就变成了筛素数,算约数个数,并高精度

首先筛素数上一个欧拉筛

然后算约数个数
1——n有约数i的数的个数为n/i
n一直除pi,每次除都加进ai

最后高精度(然而听说可以FFT?)
压位,
并有一个小优化即当乘进答案的数足够大时才进行运算,可以减少运算的次数,详见注释
(加了上面那个优化就可以不吸氧啦)
并补零的输出scanf("%09lld",ans)那个09表示补足9位,不足的位用0补齐

#pragma GCC optimize(3)
#pragma GCC optimize(2)    //额我不吸氧也可以过的[坚强.jpg]
#include <cstdio>using namespace std;const long long mod=1000000000;
int n,m,ans,tem=1;
int p[250000],b[700005];
long long e[250000];
long long a[100000];void plus(long long x){for (int i=1;i<=a[0];i++)a[i]*=x;for (int i=1;i<=a[0];i++){long long g=a[i]/mod;a[i]%=mod;a[i+1]+=g;if (i==a[0]&&g!=0) a[0]++;}
}int main(){scanf("%d",&n);for (int i=2;i<=n;i++){if (b[i]==0) p[++p[0]]=i;for (int j=1;p[j]*i<=n&&j<=p[0];j++){b[p[j]*i]=1;if (i%p[j]==0) break;}}a[1]=1;a[0]=1;for (int i=1;i<=p[0];i++){  //算每个质因数在1-n出现的次数for (int j=n;j>=p[i];) j/=p[i],e[i]+=j;}for (int i=1;i<=p[0];i++){     //这里乘法有一个小优化if (tem*(e[i]*2+1)>mod){//当要成进去的数快达到极限(很大)再乘进去,减少乘的次数plus(tem);tem=1;    //乘完后临时计数器清1}tem*=(e[i]*2+1);      //每次都往临时计数器上堆数}if (tem>1) plus(tem);        //临时计数器里可能还有数没有乘printf("%lld",a[a[0]]);for (int i=a[0]-1;i>=1;i--){      printf("%09lld",a[i]);  //这样输出可以补零呢}
}

2 【NOIP2013模拟联考3】沙耶的玩偶(doll)

在美鱼和理树后援团拯救世界的同时,外表柔弱的理树也开始坚强起来,思考着离开这个世界的办法。误打误撞地,她遇上了正在教室破坏课桌打开迷宫入口的沙耶。沙耶告诉理树,这个世界的出口就是这个迷宫的出口。于是理树毫不犹豫地跟沙耶一起跳进了迷宫。在迷宫里,两个女孩子互帮互助,一会儿割绳子,一会儿泡温泉,一会儿雕冰块,跌跌撞撞地走到了终点。不出所料,终点也有一个机关在等着她们。

终点的机关是一个立着的mn 的方格棋盘,在有些格子上放了一个玩偶,而有些地方直接挖了个大坑。只有取走所有玩偶才能打开出口。但是,由于奇怪的设定,理树和沙耶不能直接触碰玩偶,他们需要操纵机器人来收集它。机器人的走法很奇怪,和国际象棋的马有点像,只不过马可以走任意方向的12 路线,它们只会由上往下走rc(或cr)的路线,不能回头。而机器人一旦经过一个有玩偶的格子,那个格子上的玩偶将被回收,并且在机器人离开时,那个格子会变成一个坑。理树可以把机器人放在任何一个有玩偶的格子上作为起点,也可以在任何一个有玩偶的格子回收机器人。机器人行走可以视为瞬移,只不过每一次设置新起点都会消耗1 时间。并且,有坑的格子不能落脚。

就在这个紧要关头,玩偶狂热爱好者的沙耶却流着口水智商归0。理树不得不转而求助你,帮忙计算出最少多少时间就能收集到所有玩偶。

30%的数据中,1<=M,N<=4,1<=R,C<=3。

70%的数据中,1<=M<=20,1<=N<=4,1<=R,C<=3。

100%的数据中,1<=M,N<=50,1<=R,C<=10。


由于这是一个有许多格子的图,并每个格子与其他某些格子有某种关系
那么可以看看二分图/网络流

难度当然主要在建图

二分图的建图呢,就将二维的图上的点标号,化为一个个的点,将点复制一倍
设由 ( x 1 , y 1 ) (x1,y1) (x1,y1)可以跳到 ( x 2 , y 2 ) (x2,y2) (x2,y2),就将 x 1 ∗ m + y 1 x1*m+y1 x1∗m+y1向 x 2 ∗ m + y 2 + n ∗ m x2*m+y2+n*m x2∗m+y2+n∗m连边
答案是总玩偶数-最大匹配数,因为每一个匹配都是由一个点跳向另外一个点,后面那个点显然不用花费时间设置新起点,而剩下的点当然需要设置新起点

#include <cstdio>
#include <cstring>using namespace std;int dx[6],dy[6];
int m,n,e,c,ans,spa;
int b[55][55],co[5012],l[5012];
int ls[5012],ne[100005],y[100005];bool match(int x){for (int i=ls[x];i;i=ne[i])if (co[y[i]]==0){int q=l[y[i]];l[y[i]]=x;co[y[i]]=1;if (q==0||match(q)) return 1;l[y[i]]=q;}return 0;
}int main(){scanf("%d%d%d%d",&n,&m,&e,&c);if (e==c){dx[0]=2,dx[1]=e,dx[2]=e;dy[0]=2,dy[1]=c,dy[2]=-c;} else {dx[0]=4,dx[1]=e,dx[2]=e,dx[3]=c,dx[4]=c;dy[0]=4,dy[1]=c,dy[2]=-c,dy[3]=e,dy[4]=-e;}for (int i=0;i<n;i++){char ch[55];scanf("%s",ch+1);for (int j=1;j<=m;j++)if (ch[j]=='.') {b[i][j]=1;spa++;for (int k=1;k<=dx[0];k++){int x=i-dx[k],yy=j-dy[k];if (x>=0&&yy>0&&x<n&&yy<=m&&b[x][yy]==1)ne[++ne[0]]=ls[x*m+yy],ls[x*m+yy]=ne[0],y[ne[0]]=i*m+j+n*m;}}}for (int i=0;i<n;i++)for (int j=1;j<=m;j++)if (b[i][j]==1){memset(co,0,sizeof co);match(i*m+j);}for (int i=0;i<n;i++)for (int j=1;j<=m;j++)if (l[i*m+j+n*m]!=0&&b[i][j]==1) ans++;printf("%d",spa-ans);
}

开门那一瞬,阳光照在你的身上

文艺的后续:
——你的身形模糊又美丽,发丝都泛着金光,背后是蓝天白云,青叶远山
——那一瞬我以为你是我的谁

竞赛室真实的后续:
——我以为你是AJ (by hjw)
——吓得我关掉了浏览器

在教室更真实的后续:
——亮瞎了我的眼
——晒死了
——下次进教室麻烦不要走前门谢谢

2019.08.15【NOIP提高组】模拟 B 组 排序、计算几何+数论、高精度优化+二分图/网络流相关推荐

  1. 2018.12.08【NOIP提高组】模拟B组总结(未完成)

    2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...

  2. 2020.08.08【NOIP提高组】模拟:奶牛的图片 总结

    2020.08.08[NOIP提高组]模拟:奶牛的图片 总结 Description Farmer John希望给他的 N ( 1 ≤ N ≤ 100 , 000 ) N(1\leq N\leq100 ...

  3. 猎聘公司面试(黄军威) 面试时间:2019.08.15 java后端

    面试时间:2019.08.15 面试时长:1小时30分钟 面试人:一个面试官+1个人力资源HR 一.面试官的问题 后来回顾了一下,这次的面试太糟了,好几个点当时都答不上来,当时还以为没什么要紧. 面试 ...

  4. 2019.08.15【NOIP提高组】模拟 A 组

    解题报告 JZOJ 6296 投票 题目 分析 代码 JZOJ 6294 动态数点 题目 分析 代码 JZOJ 6303 演员 题目 分析 代码 JZOJ 6296 投票 题目 分析 根据贪心从小到大 ...

  5. JZOJ 5281. 【NOIP提高组模拟A组8.15】钦点

    Description Input Output Sample Input 4 4 2 a a b b a a b b c c d d c c d d 1 1 3 3 2 2 3 1 1 3 2 2 ...

  6. JZOJ5857 【NOIP提高组模拟A组2018.9.8】没有上司的舞会

    题目 Description "那么真的有果尔德施坦因这样一个人?"他问道. "是啊,有这样一个人,他还活着.至于在哪里,我就不知道了." "那么那个 ...

  7. 【每日早报】2019/08/15

    今日看点 ✦ 百度App宣布日活破2亿:信息流.百家号.小程序等是核心驱动力 ✦ 瑞幸咖啡发布上市后首份财报:第二季度净亏损6.813亿元 ✦ 美团回应"正开发地图服务":LBS业 ...

  8. 【二分,找规律】Day 14 提高组模拟C组 T1 小麦亩产一千八

    题目大意 给定斐波那契的第aaa项,求出第b" role="presentation">bbb项,默认第0项为1 解题思路 方法一:递推 找到规律后O(b)O(b) ...

  9. 第一届『Citric杯』NOIP提高组模拟赛 题解

    [官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...

最新文章

  1. 深入浅出设计模式原则之接口隔离原则(ISP)
  2. 我的天,代码居然也需要保养?
  3. linux内核io源码,Linux Kernel do_io_submit()函数整数溢出漏洞
  4. 什么是devops开发运维_为什么假设驱动的开发是DevOps的关键
  5. 【华为云技术分享】前端快速建⽴Mock App
  6. imp 只导入索引_Elasticsearch系列---实战零停机重建索引
  7. 《代码整洁之道》—第1章1.1节要有代码
  8. firefox 插件配置
  9. 写代码:实现用户输入用户名和密码,当用户名为seven且密码为123时,显示登录成功,否则失败,失败时允许重复输入三次。...
  10. VB中关于CommonDialog通用对话框的使用
  11. [小工具] LenovoOneLite 多屏协同工具
  12. 8queen(稍后补)
  13. 装修纪~~从装修中体味人生
  14. Java程序员的重启人生-3.Java基础碾压
  15. 购房贷款 等额本息 等额本金
  16. 【HTML基础】HTML的基本结构
  17. pycharm软件中去掉竖线的方法
  18. 简单因式分解100道及答案_初中数学因式分解练习题及答案.doc
  19. JavaScript 静态方法
  20. Linux 进程管理工具:supervisor

热门文章

  1. 如何实现快手主页服务一键跳转微信
  2. 前端路线--H5篇 获取路径
  3. 如何查询内网IP/公网IP
  4. 12个对生活和工作受益匪浅的建议
  5. 天津户口2020政策
  6. python BytesIO转bytes
  7. presto使用初探
  8. conda的安装与使用
  9. 安利phpEnv,用于本地开发测试的网站搭建环境集成神器
  10. Eclipse环境配置常见问题及解决方案