数学
如题
Yuhan の Blog
这个作者很懒,什么都没留下…
展开
-
Codeforces 1355D Game With Array
题目链接:https://codeforces.com/contest/1355/problem/D思路:结论:S<2NS<2NS<2N时Petya会输,否则会赢;证明:1.当S≥2NS\geq2NS≥2N时,我们选择(1,1,...,1,S−N+1)(1,1,...,1,S-N+1)(1,1,...,1,S−N+1)这个序列(一共有N−1N-1N−1个111),且令K=NK=NK=N;我们需要证明任意子连续的子序列和不等于NNN和S−NS-NS−N;(1)如果子序列不原创 2020-05-24 15:04:52 · 357 阅读 · 1 评论 -
蓝桥杯 PREV-17 约数倍数选卡片(对抗搜索)
题目链接:http://lx.lanqiao.cn/problem.page?gpid=T40思路:1.这是博弈问题的一般方法,用dfs进行对抗搜索,遍历所有可能,双方在每一步都选取最优步骤;2.单纯dfs会超时,我们知道约大的数,它的约数+倍数个数就相对可能越少,因此我们优先遍历大数即可;代码:#include<bits/stdc++.h>using name...原创 2020-03-16 15:44:09 · 146 阅读 · 0 评论 -
蓝桥杯 PREV-14 高僧斗法(Nim游戏)
题目链接:http://lx.lanqiao.cn/problem.page?gpid=T37思路:1.假设从111开始给这nnn个小和尚从左往右编号,那么编号为1,2,3,...,n1,2,3,...,n1,2,3,...,n;2.我们按照一奇一偶的方式给他们组队,结果为(1,2),(3,4),...,(n−1,n)(1,2),(3,4),...,(n-1,n)(1,2),(3,4...原创 2020-03-10 18:26:51 · 162 阅读 · 0 评论 -
HDU 1850 Being a Good Boy in Spring Festival(Nim游戏)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1850思路:1.Nim游戏的N-position(即先手必胜态)为nnn堆石子的异或和不为0;2.反之必败态为nnn堆石子的异或和为0,那么就需要给对手创造必败态;3.遍历每一堆扑克牌,假设当前堆扑克牌数量为aaa,算出其它n−1n-1n−1堆扑克牌数量的异或和为bbb,我们需要做的即让...原创 2020-03-10 17:17:30 · 99 阅读 · 0 评论 -
洛谷 P1372 又是毕业季I(公约数)
题目链接:https://www.luogu.com.cn/problem/P1372思路:假设默契值为xxx,那么根据贪心的想法,这kkk个人的序号为:x,2x,3x,...,kxx,2x,3x,...,kxx,2x,3x,...,kx;根据题意我们知道kx≤nkx\leq nkx≤n,即x≤nkx\leq \frac{n}{k}x≤kn;代码:#include<bi...原创 2020-03-07 16:48:46 · 193 阅读 · 0 评论 -
洛谷 P1865 A % B Problem(埃氏筛法)
题目链接:https://www.luogu.com.cn/problem/P1865思路:用埃氏筛法将[1,m][1,m][1,m]间的素数全部筛选出来,再用前缀和数组维护一下即可;代码:#include<bits/stdc++.h>using namespace std;const int maxn = 1e6 + 5;bool prime[maxn];...原创 2020-03-07 16:17:51 · 306 阅读 · 0 评论 -
蓝桥杯 PREV-46 填字母游戏(博弈)
题目链接:PREV-46 填字母游戏思路:此题博弈的思想就是每个人寻找自己每一步的最优解,我们用dfs模拟博弈过程;int dfs()返回某方此步骤的最优解,遍历所有空格,模拟所有可能然后取里面最优的一个作为函数返回值;在游戏结束之前每个人每个步骤填一个空格然后递归地将剩下的局面交给对方;为了减少复杂度我们采用map容器进行记忆化搜索,保存该局面的最优结果;代码:#inclu...原创 2020-02-19 17:21:59 · 293 阅读 · 0 评论 -
Codeforces 1221E - Game With String(博弈)
题目:E. Game With Stringtime limit per test: 3 secondsmemory limit per test: 256 megabytesinput: standard inputoutput: standard outputAlice and Bob play a game. Initially they have a string s1,s2,…...原创 2019-10-12 07:16:39 · 375 阅读 · 0 评论 -
CCF CSP 201803-4 棋局评估(博弈问题)
思路:1.基本思想就是暴力,枚举每一种可能情况,利用决策树进行对抗搜索;2.Alice搜索时,选取所有返回值里最大的那个,Bob相反;3.也可以用记忆化搜索进行优化,我用的string保存棋盘,用unordered_map<string,int>保存每一次结果即可;4.这题用getchar就翻车 = = ,本地调试都过了提交一分都没有,说明后台压根没按题目上给的格式来测试。代...原创 2019-11-07 17:12:29 · 190 阅读 · 0 评论 -
HDU 1205 吃糖果(鸽巢原理)
思路:1.记最多的糖果为ans,剩下糖果总数为sum;2.如果想将ans个糖果隔开,我们至少需要ans-1个其它糖果,因此sum如果小于ans-1则不行;3.如果sum大于等于ans-1,将ans个糖果隔开的区间认为是一个空间,我们可以在放满这ans-1个空间的基础上,其余每个糖果最多放在一个空间,自然不会重复,因此这种情况一定可以;代码:#include<iostream&g...原创 2019-12-14 21:09:59 · 166 阅读 · 0 评论 -
蓝桥杯 PREV-23 数字游戏(等差数列)
题目链接:PREV-23 数字游戏思路:根据题意我们易计算出第i(0≤i<T)i(0\leq i<T)i(0≤i<T)次说出的数字为[1+in(in+1)2]%k[1+\frac{in(in+1)}{2}]\%k[1+2in(in+1)]%k,我们的目标即让iii逐个遍历,然后求和即可;但是略微分析可知,这个数字在计算的过程中达到102410^{24}1024数量...原创 2020-02-22 19:32:01 · 552 阅读 · 0 评论 -
蓝桥杯 PREV-52 小数第n位(快速幂)
题目链接:PREV-52 小数第n位思路:根据题意可知答案为int(a∗10n−1%b∗1000/b)int(a*10^{n-1}\%b*1000/b)int(a∗10n−1%b∗1000/b)由于n较大,可用快速幂求取代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;l...原创 2020-02-08 17:09:02 · 159 阅读 · 0 评论 -
Codeforces 1288B Yet Another Meme Problem
题目链接:Codeforces 1288B Yet Another Meme Problem思路:设len(x)len(x)len(x)代表正整数xxx的位数;即求方程a∗b+a+b=a∗10len(b)+ba*b+a+b=a*10^{len(b)}+ba∗b+a+b=a∗10len(b)+b解的对数两边约分可得b+1=10len(b)b+1=10^{len(b)}b+1=10le...原创 2020-01-15 18:53:40 · 524 阅读 · 0 评论 -
Codeforces 1288A Deadline
题目链接:Codeforces 1288A Deadline思路:即求x+ceil(dx+1)x+ceil(\frac{d}{x+1})x+ceil(x+1d)的最小值会不会超过nnn用不等式a+b≤2aba+b\leq2\sqrt{ab}a+b≤2ab可求得左式的最小值即为2ceil(d)−12ceil(\sqrt{d})-12ceil(d)−1代码:#include&...原创 2020-01-15 18:46:33 · 395 阅读 · 0 评论 -
洛谷 P1217 [USACO1.5]回文质数 Prime Palindromes(埃氏筛法)
题目链接:P1217 [USACO1.5]回文质数 Prime Palindromes思路:1.首先我们需要知道偶数长度的回文不会是素数,因为它必定能被11整除,这样我们就能将范围缩到一千万以内;2.然后用埃氏筛法,得到一千万以内的所有素数,再挨个判断他们是否为回文即可;代码:#include<bits/stdc++.h>using namespace std;...原创 2019-12-30 20:34:50 · 359 阅读 · 0 评论 -
(Good Bye 2019) Codeforces 1270E Divide Points
题目链接:Codeforces 1270E Divide Points思路:对于所有点我们将他们分为四类:(1)(偶,偶) (2)(偶,奇) (3)(奇,偶) (4)(奇,奇);以第一个点为原点重新划分坐标轴;所有点如果都属于第一类,我们就将比例缩小两倍即所有点坐标除以2,直到有点不属于第一类,我们注意到第一个点是(0,0)永远属于第一类,所以现在我们至少有两类点;1.如果(2)...原创 2019-12-30 17:54:57 · 390 阅读 · 0 评论 -
Codeforces 1279D Santa's Bot(逆元+概率计算)
题目链接:Codeforces 1279D Santa’s Bot思路:设一共nnn个小朋友,对于第iii个礼物,能送给想要的小朋友的概率为1n∗∑1k∗an\frac{1}{n}*\sum\frac{1}{k}*\frac{a}{n}n1∗∑k1∗na,kkk分之一的求和是该礼物所在的那些kkk的倒数求和,aaa是该礼物出现的次数;最后再将所有礼物计算出来的概率相加即可;所...原创 2019-12-28 18:22:31 · 468 阅读 · 0 评论 -
Codeforces 1279A New Year Garland(鸽巢原理)
题目链接:Codeforces 1279A New Year Garland思路:简单的鸽巢原理思想代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;typedef long long LL;#define fi first#define sc second...原创 2019-12-28 17:52:49 · 387 阅读 · 0 评论 -
Codeforces 1243D 0-1 MST(补图的连通图数量)
思路:1.没有给出的边权值都为0,因此就是求补图的连通图数量-1;2.从1遍历到n,假设遍历到i,我们求出i所在的连通图的其它点,并做上标记,在遍历时,就跳过做完标记的点,遍历了ans次,就说明有ans个连通图;3.如何求出i所在的连通图的其它点呢?我们用双链表存储未被遍历过的点(节省时间),遍历和i相连权值为1的边,如果边的另一个端点未被遍历过,我们就做一个标记,接着遍历所有未被遍历过的...原创 2019-12-14 19:32:05 · 283 阅读 · 0 评论 -
Codeforces 1243C Tile Painting(素数)
思路:1.如果是素数,答案就是这个数;2.找出所有可以被这个数整除的素数,如果只有一个素数,这个素数即是答案;否则不同素数占有的区间必定交汇,那么只有一个颜色;代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;typedef long long LL;#define...原创 2019-12-14 19:18:41 · 246 阅读 · 0 评论 -
Codeforces 1264C Beautiful Mirrors with queries(逆元,递推,概率期望)
思路:这道题应该是1265E1265E1265E的HardVersionHard VersionHardVersion,根据1265E Beautiful Mirrors该题的题解,我们可以得到dp[i]=dp[i-1]+pi*1+(1-pi)*(dp[i]+1)的递推式;(稍微变换一下就可以得到dp[i]的递推式)稍微理解一下题意,我们就可以知道,每次查询,我们用这些分割点将区间n分割开来...原创 2019-12-09 21:22:20 · 232 阅读 · 0 评论 -
Codeforces 1265E Beautiful Mirrors(概率DP,逆元)
思路:1.记dp[i]为通过第i面镜子的期望天数,pi为通过第i面镜子的概率,则我们可以得到dp[i]=dp[i-1]+pi*1+(1-pi)*(dp[i]+1),其中的dp[i-1]为走到第i-1的期望天数,此时我们有pi概率只需要再走一天,有1-pi概率需要再走1+dp[i]天(往前走一天,失败,然后再走通过i的期望天数);2.除法取模需要用到逆元;代码:#include<b...原创 2019-12-09 15:57:59 · 245 阅读 · 0 评论 -
UVa 11174 Stand in a Line(递推+排列组合+逆元)
思路:1.我们首先根据父子关系可以建立一棵树(或者森林),我们设立一个虚根连接森林中所有树的根结点,那么一颗树就建好了,我们标记虚根为序号0;2.我们设f(i)f(i)f(i)表示以iii为根节点的树,这些人的排列总数,我们设s(i)s(i)s(i)表示以iii为根结点的树的结点数量,根据排列组合的知识我们可以得到f(i)=(∏f(c))∗(s(i)−1)!∏s(c)!f(i)= \fra...原创 2019-12-04 16:06:23 · 286 阅读 · 0 评论 -
HDU 6030 Happy Necklace(矩阵快速幂)
思路:1.我们用r表示红色,用b表示蓝色,对于一串长为s的珠子,它的末尾情况一共会有三种:(1)***b(2)***br(3)***brr(其中第三种包括了b在离末尾更远的地方),我们设这三个情况的种数分别为a,b,c;2.此时这串珠子在情况(1)只能继续加红色珠子,得到长度为s+1的情况(2)的珠子;原珠子在情况(2)也只能继续加红色珠子,得到长度为s+1的情况(3)的珠子;原珠子在情况三...原创 2019-12-03 12:24:24 · 159 阅读 · 0 评论 -
UVa 10006 Carmichael Numbers(快速幂)
思路:1.先判断是不是素数;2.再按题意遍历2~n-1即可,用快速幂加速就可以了;(注意用long long)代码:#include<iostream>using namespace std;typedef long long LL;bool isPrime(int n){ for(int i=2;i*i<=n;i++) if(n%i==0) return f...原创 2019-12-02 18:39:32 · 114 阅读 · 0 评论 -
蓝桥杯 PREV-1 核桃的数量(最小公倍数)
思路:求三个数的最小公倍数即可代码:#include<iostream>using namespace std;int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}int lcm(int a,int b){ return a/gcd(a,b)*b;}int main(){ int a,b,c; cin>&g...原创 2019-12-01 11:55:58 · 137 阅读 · 0 评论 -
HDU 2588 GCD(欧拉函数)
思路:1.题意是给出nnn和mmm,让我们找出有多少个x(1<=x<=n)x(1<=x<=n)x(1<=x<=n)满足gcd(n,x)>=mgcd(n,x)>=mgcd(n,x)>=m;2.设nnn和xxx的最大公约数是ddd,则我们可以将nnn和xxx表示成{n=p∗dx=q∗d\begin{cases}n=p*d\\x=q*d...原创 2019-11-30 20:33:04 · 155 阅读 · 0 评论 -
Codeforces 1263C Everyone is a Winner!
思路:1.首先根据素数判定的经验,我们需要将nnn取根号再进行遍历;2.[n/a]=b[n/a]=b[n/a]=b则有[n/b]=a[n/b]=a[n/b]=a;取了根号我们只需要计算小于等于nnn的值,然后将除的结果作为另一个值就ok了~代码:#include<bits/stdc++.h>using namespace std;int main(){ ios::sy...原创 2019-11-30 03:40:46 · 185 阅读 · 0 评论 -
Codeforces 1260C Infinite Fence(扩展欧几里得有解的条件)
思路:1.此题的1010010^{100}10100我们可以将它当成正无穷,我们设x=min(r,b)x=min(r,b)x=min(r,b),y=max(r,b)y=max(r,b)y=max(r,b),由于重复的部分我们可以涂任意颜色,因此我们需要做的就是讨论在yyy的两个倍数之间可不可以夹kkk或kkk个以上的xxx的倍数;2.我们设在mymymy到(m+1)y(m+1)y(m+1)y...原创 2019-11-28 15:06:17 · 291 阅读 · 0 评论 -
HDU 5976 Detachment
这道题目是向这位博主学习的,链接贴出来:☆HDU 5976 Detachment 详细题解(贪心+逆元+前缀和,积),讲的很细致,很感谢;思路:1.题意是将数x分成若干个正整数和,使得这些整数的乘积最大,并求出这个最大乘积除以1e9+7的余数;2.要使得乘积最大,那么我们需要尽可能的分出更多的数(1除外),又因为分出的数需要各不相同,由贪心思想,我们可以从最小的2开始往后分...原创 2019-11-22 18:49:03 · 215 阅读 · 0 评论 -
Codeforces 1255E1 - Send Boxes to Alice (Easy Version)
思路:1.因为所有盒子里要么是0要么是1,因此我们对一个是1的盒子做的操作是移动或者不移动;2.首先计算所有盒子里总的巧克力个数ans,首先明白题目中的k需要是一个质数且k就是盒子里的巧克力个数,这样才能保证移动的次数最少;3.我们可以使用埃氏筛法算出[2,ans]内的所有质数,然后依次遍历,若该数i能被ans整除,则可以分成ans/i个带有i个巧克力的盒子;因为要使移动次数最少,利用贪心...原创 2019-11-21 13:46:51 · 203 阅读 · 0 评论 -
HDU 3117 Fibonacci Numbers(矩阵快速幂求斐波那契)
思路:对于小于1e8的斐波那契数,直接打表输出即可;对于大于1e8的数,我们需要分别计算它的前四位和后四位;计算前四位:1.斐波那契数的通项公式为:f(n)=15[(1+52)n−(1−52)n]f(n)=\frac{1}{\sqrt{5}}[(\frac{1+\sqrt{5}}{2})^n-(\frac{1-\sqrt{5}}{2})^n]f(n)=51[(21+5)n−(2...原创 2019-11-19 16:36:08 · 176 阅读 · 0 评论 -
HDU 1003 Max Sum
思路:1.用一个变量max_s记录最大的字串和,初始为-1001;2.我们需要发现一个规律,和最大的子串的前n(0<n≤len)一定是正数,否则砍去这个前n项我们能得到一个和更大的子串,除非这个子串只由一个负数组成;3.使用一个变量ans记录当前子串的和,如果ans>max_s则更新max_s和最大串的左右端点;如果ans<0则抛弃当前子串,即更新ans为0;代码:...原创 2019-11-18 14:04:36 · 143 阅读 · 0 评论 -
Codeforces 1244C The Football Season
题目:C. The Football Seasontime limit per test: 1 secondmemory limit per test: 256 megabytesinput: standard inputoutput: standard outputThe football season has just ended in Berland. According to t...原创 2019-10-15 21:17:35 · 336 阅读 · 0 评论