数学
ssllyr
锦瑟无端五十弦,一弦一柱思华年。
展开
-
【AtCoder - abc310_e】NAND repeatedly【找规律】
看完题面终于知道NAND是什么意思(not and),想到这个应该是线性的时间复杂度。进一步看,这个运算有个规律,对于任意一个区间,只要结尾是0,那运算结果就是1,对于连续的1,结果0,1交替出现。考虑对于每个位置为结尾的区间统计答案,先把所有单点为1的加进答案,然后找到所有结尾为0的位置i,然后答案加上i−1。对于为1的区间,发现答案交替的顺序与结尾连续1的个数有关,这个预处理是很容易的,以i结尾的区间连续1的个数记为si。原创 2023-08-22 15:01:36 · 105 阅读 · 0 评论 -
【CF1846E】Rudolf and Snowflakes【数学】
简单的version可以直接暴力枚举k判断。难的version范围到了1018,所以考虑更加数学的方法。数据范围是n<=1e18,k>1雪花中点的个数是1kk2k3...kp,根据数据范围,显然p的范围是p<=62关键在于缩小k的范围,我们考虑从k的几次方开始枚举,发现如下事实:如果我们直接存入最小的值是1kk2,那么k的范围是k<1e9,此时时间复杂度是O1e9∗62如果我们直接存入最小的值是1kk2k3。原创 2023-08-21 16:37:38 · 65 阅读 · 0 评论 -
【hdu3183】A Magic Lamp【暴力】
这种题之前貌似做过,显然方案就是每次找到第一个“峰顶”,并删去,反复找k次就可以了。这道题主要是一些细节,删去一个数之后要更新链表,前导0要判断好,详见代码。原创 2023-08-21 15:43:26 · 54 阅读 · 0 评论 -
【CF1763C】Another Array Problem【数学,思维】
发现操作一次就会将区间元素变得一样,操作两次就会全部变成0,那么就想怎么把全部都变成最大的那个数。显然的方案:将它左右的全部变成0,然后左右包含上它一起变成最大。但如果只有四个数呢?那也很好构造方案:将一边的两个变成0,然后带上它一起变成最大,然后它跟左边的一个一起变成0,最后带上右边已经变成最大的那个就行了。结论:n>3的时候答案就是最大的数*n。考虑暴力解决n<=3的情况:n=2时直接判断的大小关系n=3时只有三种情况,每个判断一下就行。关键在于,然后剩下的显然。原创 2023-08-19 20:23:47 · 65 阅读 · 0 评论 -
【CF1747D】Yet Another Problem【位运算,思维】
题面有两个关键词:“异或”和“奇数”。要按位来考虑吗?还是利用异或操作的特性?为什么要求操作区间的长度是“奇数”?1次操作后区间中某一段变成了相同的数字,那么再对它们异或一次,不就变成全0(当长度为偶数时)或者保持不变(当长度为奇数)吗?原来当R−L1和r−l1(两个区间的长度)为偶数的时候,我们只需要2次操作就可以将所有数字变成0。如果所有数字本身异或结果就是0,那就只需要1次操作。如果所有数字本身是0,那就需要0次操作。题目设置区间长度为奇数,必然有更多含义。原创 2023-08-19 19:59:04 · 67 阅读 · 0 评论 -
【CF1740C】Bricks and Bags【暴力】
赛时想简单了。。先排序,蹲坑想到的做法是一定把最后或者第一个放中间,然后一定有一个最近的和一个极差。但是在赛后手摸数据的时候发现不对,万一最大那个往前走一个相距很近的点,但是离那个数距离最近的又很远,极差又不会有什么变化,那不就不成立了吗?于是分类再细一点,把绝对值符号拆开成三种情况(大小关系),一个一个枚举到底哪个才作为中间的量,确定中间的量之后也就可以根据一开始“极差”的思想算出答案,最后取最大值就可以了。原创 2023-08-18 08:31:02 · 75 阅读 · 0 评论 -
【Atcoder abc246_f】Typewriter【状态压缩】【组合数学,容斥】
计数题,DP状态都存不下,考虑组合数学。先用单个字符串手摸一下,发现一个长度为k的字符串打出L个字符最多有kL种。答案显然不可能是简单相加。于是我又想到了去重,但是不是一个字符串直接去重肯定是不行。那么数学方法又有什么能达到“求并集,去重”的效果呢?n个集合的容斥原理公式参考百度就非常清楚了,发现是偶数个集合的交集前面就是减号,反之则为加号。注意到n的值特别小,仿佛跟状压DP的一样,于是考虑存储所有字母存在性的状态,一共226完全可以枚举和存储。原创 2023-08-17 20:28:58 · 89 阅读 · 0 评论 -
【AtCoder abc308_e】MEX【计算】
第一眼看上去又是n3枚举??不太可能。仔细一看这个答案只能是0,1,2,3。但是到这里赛时还是没分析出什么有用的性质。想到可以记录每个E前面M后面X的个数,但是个数貌似没什么用。统计个数实际上复杂度已经达标了,考虑能不能记录多一点信息,于是就想到了正解:对于每个E把前面权值为0,1,2的M,后面权值为0,1,2的X全部记录,可以线性时间统计答案,只需要判断各种组合情况然后对于每个E暴力计算就行,要不重不漏。原创 2023-08-15 11:32:24 · 88 阅读 · 0 评论 -
【CF1789D】Serval and Shift-Shift-Shift【构造】
没有要求最小化步数,也就是与DP没多大关系,只需要考虑如何操作能一定在有限步数里面完成调整,这是构造题的一般思路。看到是位运算,就从位的角度分析,看能不能一定有策略每一步都接近b。想到这里就很接近了,也就是用逐位调整的思想,看能不能每次改变至少确定一位,并且之后不会受到后面的影响。最后考虑无解的情况。我们先考虑如何将a与b的第一个1对齐。先找到b的第一个1,然后用这个位置往前更新,每找到a的一个1(证明突出来了),就用a的最后一个1去异或它,因为后面全是0了,所以对于已经更新过的不会有任何影响。原创 2023-08-15 09:52:48 · 65 阅读 · 0 评论 -
【洛谷P2657】Windy数【数位DP】
数位DP原创 2023-08-15 08:34:39 · 57 阅读 · 0 评论 -
【CF1808C】Unlucky Numbers【类 数位DP】
。原创 2023-08-12 08:12:18 · 76 阅读 · 0 评论 -
【CF1798E】Multitest Generator【规律,处理】
。原创 2023-08-09 11:57:11 · 68 阅读 · 0 评论 -
【CF1781D】Many Perfect Squares【数学】
数学原创 2023-08-09 11:35:58 · 110 阅读 · 0 评论 -
【NOIP2022】种花【计数,模拟】
种花原创 2023-08-06 10:23:41 · 275 阅读 · 0 评论 -
【CF1839C】Insert Zero and Invert Prefix【构造】
构造原创 2023-08-05 08:22:39 · 113 阅读 · 0 评论 -
【CF1788D】Moving Dots【组合数学】
组合数学原创 2023-08-04 20:22:16 · 84 阅读 · 0 评论 -
【CF1722G】Even-Odd XOR【构造】
构造原创 2023-08-04 08:39:20 · 83 阅读 · 0 评论 -
【CF1660E】Matrix and Shifts【矩阵处理】
预处理原创 2023-08-01 19:48:46 · 85 阅读 · 0 评论 -
【CF1798C】Candy Store【贪心】【数学】
贪心+数学原创 2023-08-01 19:39:56 · 64 阅读 · 0 评论 -
【洛谷P1351】联合权值【数学】
数学,暴力原创 2022-08-24 10:04:33 · 133 阅读 · 0 评论 -
【洛谷P1965】转圈游戏【数学】
数学原创 2022-08-20 09:30:01 · 910 阅读 · 0 评论 -
【洛谷P1969】积木大赛
先考虑单独推平所有上升段的用时,就是所有上升段的末尾的值的和,我们统计为s2。但是有些是可以合并推平的啊,对于相邻的两个段来讲,他与前面那个段能合并一起推平的次数就是这个段开头那个数的值,那如果有连续好几个段呢?其实已经统计进去了,自行模拟一下减的次数就行了。一定是某个上升段的末尾,但不一定是开头。然而我们在循环的时候可以统计到n是上升段开头的情况,不能统计上升段末尾的n。这道题最初的想法是很正确的,就是跟上升段有关。整个数列可以划分为若干个上升段,每个上升段推平的时间就是最后一个数的大小。原创 2022-08-20 09:20:22 · 211 阅读 · 0 评论 -
【gzoj8.12综合三】选择客栈【数学处理】
数学处理原创 2022-08-12 21:45:30 · 125 阅读 · 0 评论 -
【8.4gzoj T2】完美交换【数学】
交换原创 2022-08-04 19:25:45 · 803 阅读 · 5 评论 -
【8.4gzoj T1】Eeny Meeny Moo【约瑟夫递推】
约瑟夫原创 2022-08-04 19:14:25 · 56 阅读 · 0 评论 -
【洛谷P1654】OSU!【递推】【数学期望】
期望原创 2022-08-03 17:15:48 · 204 阅读 · 0 评论 -
【51nod】B君的连通【期望】
期望原创 2022-05-03 21:24:45 · 156 阅读 · 0 评论 -
【51nod】绑鞋带【概率】
上代码#include<iostream>#include<iomanip>#include<cstdio>#include<algorithm>using namespace std;double ans,n;int main(){ cin>>n; ans=1.0; for(int i=2*n-1;i>1;i-=2) { ans*=1-1.0/i; } cout<<ans; return..原创 2022-05-03 21:22:54 · 186 阅读 · 0 评论 -
【51nod】硬币游戏【概率】
概率原创 2022-05-03 21:20:57 · 741 阅读 · 0 评论 -
【51nod】或减与【位运算】
分析直接算,减就好了。。。也可以直接xor上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int a,b;int main(){ cin>>a>>b; cout<<(a|b)-(a&b); return 0; } ...原创 2022-02-25 20:45:06 · 332 阅读 · 0 评论 -
【51nod】授勋【位运算】
分析二进制拆分,跟快速幂一样上代码#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n,a[100010];int main(){ cin>>n; for(int i=1;i<=n;i++) { int ans=0; scanf("%d",&a[i]); while(a[i]) { cout&.原创 2022-02-25 20:43:04 · 442 阅读 · 0 评论 -
【洛谷1月月赛LGR-100】 A 质因数
分析法1:求出第一个小于等于这个数的2n2^n2n的数。因为质因数最多的肯定是2n2^n2n,所以只需要考虑把其中一个2换成一个大一点的数,使得乘积等于输入的x。而这个数不能大于2*2(这样就会大于2n+1),所以只能换成3。暴力判断即可。法2:思想跟法1一样,直接分解质因数2,看看剩下的是否<=3。上代码法一#include<iostream>#include<cstdio>#include<algorithm>using namespace...原创 2022-01-21 16:59:11 · 356 阅读 · 0 评论 -
【Codeforces Round#166】C. Secret【构造】
分析题意:有k个人要选n个数,不能重复选,每个人选的数不能构成一个等差数列。输出一组解。如果n<k∗3n<k*3n<k∗3,那么肯定不行,因为有一个人会选到两个数,一定构成等差数列。策略:先每个人选两个,然后从前往后每个人选一个,剩下的全部给第一个人。因为第一次选的差值是1,然后因为后面有隔开,肯定差值大于1,然后最后全部给第一个也无所谓。直接往数组里面填就好了!上代码#include<iostream>#include<cstdio>#inc..原创 2022-01-21 11:55:16 · 450 阅读 · 0 评论 -
【Codeforces Round#166】B. Prime Matrix【质数】
分析题意:每次操作可以将一个数+1,问至少多少次操作能将某行/列变成全是质数。欧拉筛存100000之内质数,然后对于每个数,二分查找比他大的第一个质数,求差值,然后看哪一行/列操作步数最少。上代码#include<iostream>#include<cstdio>#include<algorithm>#include<cstdio>using namespace std;int n,m,a[510][510],v[100001],b[5..原创 2022-01-21 11:45:32 · 230 阅读 · 0 评论 -
【SSL1213】多边形面积【计算几何】
分析两个条件:线段不能相交,能构成多边形。判断线段相交就是跨立实验+快速排斥实验。然后叉积求三角形面积就可以了。要开double!判断跨立的时候只用枚举所有组合就可以。上代码#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;int n;double x[100001],y[100001];double ..原创 2022-01-18 09:28:33 · 209 阅读 · 0 评论 -
【poj1654】Area【叉积】
题目大意一个坐标系,从原点开始走,然后1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走。(看翻译直接无限WA),给出一串包含1-9的字符串,问你这些点所围成的面积分析因为输入的都是相邻的点,我们就每次记录一条线段两端的坐标,把这个三角形算出来(叉积/2)。最后取绝对值就可以上代码#include<iostream>#include<cstdio>#include<algorithm>#inc原创 2022-01-18 08:31:05 · 71 阅读 · 0 评论 -
【luoguP2785】磁通量【计算几何】
![在这里插入图片描述](https://img-blog.csdnimg.cn/626c7074626443e28509e00bfa414b17.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3NsbHly,size_20,color_FFFFFF,t_70,g_se,x_16)分析叉积求面积,乘上B。每个三角形面积相加,最后取绝对值上代码#include<iostream>原创 2022-01-18 08:27:26 · 123 阅读 · 0 评论 -
【51nod】线段相交【计算几何】
分析我们分两步确定两条线段是否相交: (1)快速排斥试验 设以线段 P1P2 为对角线的矩形为R, 设以线段 Q1Q2 为对角线的矩形为T,如果R和T不相交,显然两线段不会相交。 (2)跨立试验 如果两线段相交,则两线段必然相互跨立对方。若P1P2跨立Q1Q2 ,则矢量 ( P1 - Q1 ) 和( P2 - Q1 )位于矢量( Q2 - Q1 ) 的两侧,即( P1 - Q1 ) × ( Q2 - Q1 ) * ( P2 - Q1 ) × ( Q2 - Q1 ) < 0。上式可..原创 2022-01-18 08:24:54 · 257 阅读 · 0 评论 -
【SSL1715】计算面积【叉积】
Description 呆子是一个很聪明的人但也是一个很粗心的人,因此常常会丢三落四。一次老师给呆子留了一个很简单的题目,已知平面上一平行四边形的四个顶点,求这个平行四边形的面积。但粗心的呆子却只记了三个点的坐标,因此呆子现在和郁闷。你现在能帮助呆子计算一下老师留给呆子的平行四边形可能的最大面积是多少吗?Input 首先输入一个整数t表示测试数据的组数(1 =< t <= 30),接下来的t行,每行三对整数,表示呆子已知的平行四边形的顶点坐标。每对整数x, y(0<=x, y &原创 2022-01-18 08:18:56 · 65 阅读 · 0 评论 -
【SSL1232】雷达覆盖【叉积】
分析如果超出半径的点直接不要了。然后枚举以某个点为平角的时候,求两侧的覆盖数,取max。(半圆)判断两侧就用叉积上代码#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int xx,yy,n,x[1010],y[1010],v[1010],mx;double r;bool dis(int a,int ..原创 2022-01-17 07:57:59 · 74 阅读 · 0 评论