笔记
深巷wls
平平无奇
展开
-
派蒙的奇妙冒险------石之海(C/C++)
大于2的时候就是两种,不大于2的时候就是一种原创 2022-06-01 14:55:10 · 200 阅读 · 0 评论 -
L1-5 不变初心数 (15 分)(C/C++)
输入样例:4182569979288672输出样例:9NO36NO#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include<algorithm>#include<string.h>#include<math.h>#define llu unsigned long longusing na.原创 2022-04-17 20:26:07 · 2933 阅读 · 0 评论 -
试题 C: 阶乘约数(C/C++)唯一分解定理
题目描述:定义阶乘 n ! = 1 × 2 × 3 × ⋅ ⋅ ⋅ × n请问 100 ! (100 的阶乘)有多少个正约数。任意一个正整数 X 都可以表示成若干个质数乘积的形式,#include <bits/stdc++.h>#define llu unsigned long longusing namespace std;int a[110];long long res=1; int main(){ for(int i = 2; i <= 100; i ++原创 2022-03-26 10:49:07 · 1078 阅读 · 0 评论 -
组合数问题(杨辉三角)C/C++
规律就是杨辉三角啊.对于一个矩阵a,我们能在O(1)时间内求出子矩阵[x1x2][y1y2]的和。设sum[i][j]为子矩阵[1i][1j]的和。则由容斥原理得:sum[0][j]=sum[i][0]=0a[x1x2][y1y2]=sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1]。其实就是降低时间复杂度,拿空间换时间。每一个元素先开始预处理得到以(1,1)为左上角,自身为右下角的矩阵里所有元素之和。之后你要是想计算某个区间内的...原创 2022-01-16 21:25:58 · 316 阅读 · 0 评论 -
同余方程(扩展欧几里得)(C/C++)
ax%b=1,则a和b的最大公约数一定是1。#include <cstdio>#include <iostream>using namespace std;int a,q;int x,y;void exgcd(int a,int b){ if (b==0) { x=1; y=0; return ; //得到gcd(b,0)时到达边界值 } // else { exgcd(b,a%b); int k=x; x=y; y=k-.原创 2022-01-16 20:58:32 · 392 阅读 · 0 评论 -
The Lottery(C/C++)
题目描述给出n , m,和m个数a[1]⋯a[m]。求1⋯n中不被a[1]⋯a[m]中任意一个整除的数的个数。10⩽n< 2^{31} ,1⩽m⩽15输入格式每组数据以n,m为第一行。第二行m个数,表示a[i]。输入文件以EOF结尾。输出格式每组数据一行一个数字表示答案。样例输入10 22 320 22 4样例输出310#include <iostream>#include <cstdlib>#include <cstdio&g原创 2022-01-16 20:22:11 · 170 阅读 · 0 评论 -
互质数的个数(欧拉函数)C/C++
欧拉函数 O(n)=n(1-1/P1)(1-1/P2)…(1-1/Pn) ,其中P1…Pn为n的质因子,求出来的结果就是题目所求。不知道为社么这么写时间超限,下面那种方式写就能过。#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include <algorithm>#include<string.h>#include<q..原创 2022-01-16 19:30:20 · 1654 阅读 · 0 评论 -
Bash游戏(博弈)C/C++
最多只能拿k个,谁最后一个拿完谁就是赢家,所以只要n不能被(k+1)整除的的话,就A赢,若是n能被(k+1)整除的话,那么久B赢。#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include <algorithm>#include<string.h>#include<queue> #include<math...原创 2022-01-15 19:39:23 · 2121 阅读 · 0 评论 -
逆元(C/C++)
首先要知道什么是逆元逆元定义:对于ab≡1(mod m),b是a在模m下a的逆元。首先对于同余符号≡,如 a≡b%m 表示的意思是a%m=b%m,a、b模m后余数相同。逆元可以看作一个数的倒数 c * b≡1(mod m)(b为c的逆元)可得(a/c)%m=(ab)%m推导过程:(a/c)%m=(a/c)*1%m=(a/c) * c * b%m=(a * b)%m由费马小定理:a、m是互质的正整数,有a^(m-1)≡1(mod m)可得:a的逆元为:a^(m-2)推导过程:a^(m-1)≡原创 2022-01-15 19:17:17 · 2642 阅读 · 0 评论 -
快速幂取模(C/C++)
快速幂取模的思路快速幂实现的最基本的理论就是我们离散课上或者数论中学过的一条公式推出的引理。引理:积的取余等于取余的积的取余。再在这条引理的基础之上,对指数型数据进行拆分以及合并,从而得到我们用的快速幂算法。快速幂具体分析对a^b进行分析。对于当a和b较小是直接用int或者long存是没有问题的,但是当a和b大到一定程度时,这就不是暴力存就可以解决的问题了。我们应该怎么去解决这个问题呢?在这里我们需要把注意力放在“大”字上面,正是由于a和b过大才导致的问题。所以我们要想办法不断地减小a和b的规模,所原创 2022-01-15 13:25:18 · 825 阅读 · 0 评论 -
判断一个数是不是质数(C/C++)
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数0和1既不是质数也不是合数,最小的质数是21.最直观,效率最低bool isPrime(int n){ if (n <= 3) { return n > 1; } for(int i = 2; i < n; i++){ if (n % i == 0) { return false; }原创 2021-12-11 14:11:14 · 2325 阅读 · 2 评论 -
时钟走了多少秒(C/C++)
题目描述有一时钟在某时刻的时间为HH:MM:SS(24小时制),在经过一段时间(<24h)后,其时间变为hh:mm:ss 求其中经过了多少秒。输入说明第一行:输入时间HH:MM:SS第二行:输入时间hh:mm:ss输出说明1行,为两时刻内经过的秒数。输入样例1:06:16:0206:17:22输出样例1:80输入样例2:23:59:5900:00:01输出样例2:2思路:用hh2-hh1算出过了多少个小时,因为可能出现跨过24点的情况,所以需要结果+24然后取模h=(原创 2021-12-10 17:58:28 · 644 阅读 · 1 评论 -
雷霹数(very 简单的方法)C/C++
思路:正常人肯定是循环切割,但是,我一直不是正常人所以,完全没有循环切割的必要,只需要直接切就可以了,具体看代码very very good,very very 巧妙#include<iostream>#include<algorithm>using namespace std;#define llu unsigned long longint main(){ llu l,r; cin >> l >> r ; llu num=0;..原创 2021-12-08 11:12:05 · 439 阅读 · 0 评论 -
P1017 [NOIP2000 提高组] 进制转换(C/C++)
P1017 [NOIP2000 提高组] 进制转换负进制数转换:和正进制一样,每次取的余数保证在0 – r-1之间。(例如r=-16,则余数应该在0-15)就可以直接输出。所以用系统的“%”运算符的时候必须注意检查是不是在该范围(可能在r+1~0),否则就调整。调整的方法是:如果余数<0,那么:余数-=r;商++;正确性证明:(商+1)×除数+(余数-除数)=商除数+除数+余数-除数=商×除数+余数=被除数了解了上面这些,只需要不断取余最后逆序输出就行啦AC代码:#include原创 2021-11-28 19:45:06 · 795 阅读 · 0 评论 -
P1348 Couple number完全平方数(C/C++)
P1348 Couple number这道题运用了平方差公式这里给大家演示一下平方差公式化简的步骤(a+b)(a-b) =a(a-b)+b(a-b) =a2-ab+ab-b2 =a2-b2∴ 由此式反推回去aa-bb=(a+b)(a-b)a+b与a-b奇偶性一定相同证明:a+b-(a-b)=a+b-a+b=2b∵b是整数,∴2b一定是偶数∴a+b与a-b奇偶性相同那么,出现Couple number数有两种情况:a+b为奇数或a+b为偶数如果a+b是奇数,奇数乘奇数一定还得奇数,这原创 2021-11-27 19:03:24 · 572 阅读 · 0 评论 -
P1536 村村通(并查集C++)
输入输出样例输入4 21 34 33 31 21 32 35 21 23 5999 00输出102998思路:并查集板子题,注意城市编号从0开始AC代码:#include<iostream>#include<algorithm>using namespace std;int a[1010];int search(int x){ if(a[x]!=x) { a[x]=search(a[x]); } return .原创 2021-11-23 19:20:45 · 928 阅读 · 0 评论 -
柠檬水找零(C++)
题目描述一天,贫穷的小王决定通过卖柠檬水来赚取零花钱,于是他摆了个柠檬水摊,柠檬水定价一杯五元,每十分钟会来一位客人,来买的客人只会支付五元,十元,二十元面值的现金(随机),由于贫穷,小王一开始手里没有现金,每位客人等待找钱时间超过五分钟就会不高兴,现在小王想知道能否让每位客人都开心买到柠檬水。输入第一行一个n表示客人的数量第二行n个数,表示每个客人支付的金额输出如果能让每个人都开心,输出Happy,否则输出 Unhappy思路:直接模拟,每来一个顾客更新一下手里的五元和十元钞票的张数即可。原创 2021-11-20 22:39:37 · 885 阅读 · 0 评论 -
一个数可以用有多少种连续素数之和表示(C++)
输入:2317412066612530输出:11230012#include <iostream>using namespace std;const int maxp = 2000, n = 10000;int prime[maxp], total = 0;bool isprime(int k) //bool函数用来求素数{ for (int i = 0; i < total; i++) if (k % prim.原创 2021-07-28 15:32:45 · 484 阅读 · 0 评论 -
CF292A SMSC
CF292A SMSC直接模拟#include<iostream>using namespace std;int maxn,n,t,x;//maxn表示最大用的时间,t为当时的时间,x为当时信息条数 int main(){ cin>>n; for(int i=1;i<=n;i++) { int in1,in2;//每次读入两个数 cin>>in1>>in2;//读入 x-=in1-t;//经过了in1-t分钟,所以发原创 2021-07-26 20:23:55 · 83 阅读 · 0 评论 -
P5461 赦免战俘(递归/找规律)C++
P5461 赦免战俘可以找规律做这道题每一个数字都是它上方数字加上右上方数字再模2。其实就是不进位加法,异或一下就好了。#include<iostream>#include<stdio.h>#include<iomanip>#include<stack>#include<set> #include<queue>#include<cstdlib>#include <algorithm>#in原创 2021-07-15 14:18:30 · 690 阅读 · 0 评论 -
CF11A Increasing Sequence(C++)
CF11A Increasing Sequence题意翻译题面描述把数列中一个数加上 dd 算作一次操作,求最少几次操作能把这个数列变为递增数列。输入格式输入共 2 行。第一行 2 个整数 n 和 d,n 表示数列中数的数量,d 含义如题目所示。第二行 n 个整数,表示原始数列。输出格式一行一个整数 m,表示最少 m 次操作能把这个数列变为递增数列。输入输出样例输入:4 21 3 3 2输出;3直接模拟即可#include<iostream>#inclu原创 2021-07-11 17:18:25 · 331 阅读 · 0 评论 -
CF621A Wet Shark and Odd and Even(C++)
CF621A Wet Shark and Odd and Even题意翻译输入N个正整数选择其中的几个,组成最大的偶数(如果不选输出0)输入输出样例输入:31 2 3输出:6输入:5999999999 999999999 999999999 999999999 999999999输出:3999999996就是全部加起来,如果是偶数就直接输出,是奇数就减去输入中那个最小的奇数#include<iostream>#include<cstdio>原创 2021-07-11 17:05:34 · 244 阅读 · 0 评论 -
P1551 亲戚(并查集)C++
输入输出样例:输入:6 5 31 21 53 45 21 31 42 35 6输出:YesYesNo先根据输入把亲戚关系并在一起,再查找就可以了#include<iostream>#include<cstdio>#include<iomanip>#include<stack>#include<queue>#include<cstdlib>#include <algorithm>.原创 2021-07-11 16:47:51 · 393 阅读 · 0 评论 -
P3367 【模板】并查集C++
输入输出样例输入:4 72 1 21 1 22 1 21 3 42 1 41 2 32 1 4输出:NYNY#include<iostream>#include<cstdio>#include<iomanip>#include<stack>#include<queue>#include<cstdlib>#include <algorithm>#include<stri.原创 2021-07-11 12:05:11 · 101 阅读 · 0 评论 -
P1886 滑动窗口 /【模板】单调队列C++
首先尝试直接模拟,最后几个案例时间超限了#include<iostream>#include<cstdio>#include<iomanip>#include<stack>#include<queue>#include<cstdlib>#include <algorithm>#include<string.h>#include<math.h>#define llu unsigne.原创 2021-07-11 11:28:19 · 159 阅读 · 0 评论 -
P1540机器翻译(queue队列)C++
不多说,直接模拟就可以了#include<iostream>#include<cstdio>#include<iomanip>#include<stack>#include<queue>#include<cstdlib>#include <algorithm>#include<string.h>#include<math.h>#define llu unsigned long...原创 2021-07-10 20:06:37 · 307 阅读 · 0 评论 -
P5788 【模板】单调栈(C++)
首先尝试的暴力解题,但是时间超限了我们可以从前往后遍历,维护一个单调递减栈:对于每个点,如果它的值大于栈顶下标表示的数组值,就依次弹出栈顶元素、并且置这些栈顶下标对应的答案为当前点的下标。如果值小于栈顶下标对应的数组值,就压栈。最后输出答案数组即可。#include<iostream>#include<cstdio>#include<iomanip>#include<stack>#include<cstdlib>#include ..原创 2021-07-10 18:37:47 · 424 阅读 · 1 评论 -
P1739 表达式括号匹配(stack栈)C++
#include<iostream>#include<cstdio>#include<iomanip>#include<stack>#include<cstdlib>#include <algorithm>#include<string.h>#include<math.h>#define llu unsigned long longusing namespace std;int main(..原创 2021-07-10 11:19:42 · 394 阅读 · 0 评论 -
P1161 开灯(C/C++)
直接暴力解题就可以了#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include <algorithm>#include<string.h>#include<math.h>#define llu unsigned long longusing namespace std;int main(){ //cou...原创 2021-07-07 18:43:04 · 310 阅读 · 0 评论 -
P1469 找筷子(map容器,异或运算)C++
用map挺简单,但是空间有点超限:#include<iostream>#include<cstdio>#include<map>#include<iomanip>#include<cstdlib>#include <algorithm>#include<string.h>#include<math.h>#define llu unsigned long longusing namespac..原创 2021-07-07 18:30:50 · 951 阅读 · 0 评论 -
P1638 逛画展(尺取法)C/C++
#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include <algorithm>#include<string.h>#include<math.h>#define llu unsigned long longusing namespace std;int main(){ //cout << ..原创 2021-07-07 17:53:48 · 595 阅读 · 0 评论 -
P2280 [HNOI2003]激光炸弹(二维前缀)C/C++
计算二维前缀和边上的物体是不会受到伤害的,因此可以把每个目标的坐标向右上角平移一位。举个例子,(0, 0)和(1, 1),原本sum(1, 1)是2的(不符合题意);平移之后变成了(1, 1)和(2, 2),sum(1, 1)变成了1,符合题意#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include <algorithm>#inclu..原创 2021-07-07 15:51:16 · 320 阅读 · 0 评论 -
P5638 光骓者的荣耀(前缀)C/C++
#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include <algorithm>#include<string.h>#include<math.h>#define llu unsigned long longusing namespace std;int main(){ cout << ...原创 2021-07-07 11:35:55 · 368 阅读 · 0 评论 -
P2367 语文成绩(差分)C/C++
#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include <algorithm>#include<string.h>#include<math.h>#define llu unsigned long longusing namespace std;int main(){ cout << fix..原创 2021-07-07 10:15:21 · 451 阅读 · 0 评论 -
T183635 二分查找(II)C/C++
#include<iostream>#include<map>using namespace std;int main(){ int n,m; cin >> n >> m ; int a[n+10],b[200010]={0}; for(int i=0;i<n;i++) { cin >> a[i]; b[a[i]]++; } a[n]=200001; while(m--) { int res=0..原创 2021-07-04 21:27:12 · 132 阅读 · 0 评论 -
P1873 砍树(二分法)C/C++
#include<iostream>#include<algorithm>#define llu unsigned long long using namespace std;llu sum(llu h[],llu n,llu mid){ llu ans=0; for(llu i=0;i<n;i++) { if(mid > h[i])continue; else ans += h[i]-mid; } return ans;}llu ..原创 2021-07-04 15:31:43 · 1131 阅读 · 0 评论 -
P1908 逆序对(归并排序)C/C++
#include<iostream>using namespace std;long long int ans=0;void merge_sort(int a[],int temp[],long long int left,long long int right){ if(left==right){ return; } long long int mid=(right+left)/2; long long int i1,i2,cu..原创 2021-07-04 15:28:11 · 188 阅读 · 0 评论 -
二分查找算法C/C++
题目描述现在有一个长度为n的有序的序列,m次询问,每次会告诉你一个数字x,让你完成以下两种操作:1.找到第一个大于等于x的值的下标,如果有多个等于的话找到第一个等于的下标2.找到第一个大于x的值的下标 如果没有就输出NO,保证序列有序。输入格式第一行两个正整数n(n <= 100000)代表序列长度和m(m <= 100000)代表询问次数,第二行n个数字表示有序序列a(其中0 <= ai <= 200000)。接下来m行每行一个数字x(0 <= x <= 2原创 2021-07-04 12:37:46 · 1224 阅读 · 0 评论 -
快速排序C/C++
#include<iostream>#define ll long long intusing namespace std;void sort(int l,int r);ll a[100005];int main(){ int N,i; cin >> N; for(i=0;i<N;i++) cin>>a[i]; sort(0,N); for(i=1;i<N;i++) co..原创 2021-07-04 09:56:56 · 55 阅读 · 0 评论 -
一元三次方程求解C/C++
//公式法/*一元三次方程:aX^3+b^X2+cX+d=0 重根判别公式: A=b的二次方-3ac B=bc-9ad C=c的二次方-3bd 当A=B=0时,X1=X2=X3= -b/3a= -c/b = -3d/c*/#include<iostream>#include<math.h>#include<stdio.h>#include<algorithm>using namespace std;..原创 2021-07-04 09:46:48 · 3950 阅读 · 3 评论