kms激活windows
1 | slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX |
1 | slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX |
1 | #include <fstream> |
C++中一个打开文件的流可以多次打开不同的文件
接下来,我们来学习如何求解线性同余方程。让我们考虑如何求线性方程ax=b(mob m)。对于实数运算下的方程ax=b,由于a存在倒数,因此很容易求解。如果在mod m的运算下,也有像满足ay=1(mob m)这样的a的倒数存在,方程就可以求解了。我们把这样的y叫做a的逆元,记作a^-1。如果能求解逆元,那么就有x=a^-1*xa=a^-1b,也就可以求出x了。由于方程ax=1(mob m)等价于存在整数k使得ax=1+mk,因此稍作变形之后,可以变为求解满足ax-mk=1的x的问题。这个问题可以用extgcd(扩展欧几里得算法)求解。同时,也可以知道如果gcd(a,m)!=1,那么逆元是不存在的。
1 | int mod_inverse(int a,int m){ |
如果a和m不互素,那么ax=b(mob m)就等价于(a/gcd(a,m))x≡b/gcd(a,m)(mob m/gcd(a,m))
从式子中可以看出,当b无法整除gcd(a,m)时,原方程无解。在有解的情况下,我们有x≡gcd(a/gcd(a,m))^(-1)*(b/gcd(a,m))(mob m/gcd(a,m))
因此,ax=b(mob m)的解为x≡a(a/gcd(a,m))^(-1)*(b/gcd(a,m))+(m/gcd(a,m))*k(mob m)(0≤k<gcd(a,m))
需要注意的是这里和实数的情况有所不同,有可能有多解,也有可能无解。
给定只由 $6$ 种括号字符组成的字符串:(, ), [, ], {, }。判断每个字符串是否为“合法括号序列”,合法则输出 YES,否则输出 NO。合法括号序列的定义:
(A), [A], {A} 均合法;第一行一个整数 $T$,表示数据组数。接下来 $T$ 行,每行一个只包含上述 $6$ 种字符的字符串。
对于每个字符串,输出一行:
1 | 1 |
1 | YES |
1 | 6 |
1 | YES |
记单串长度记为 $|S|$。测试数据满足 $1 \leq |S| \leq 10^6$,$1 \leq T \leq 2\times 10^5$,同一输入文件内总长度 $\sum |S| \leq 2\times 10^6$,字符串只包含字符 ()[]{}。
我们知道括号像栈一样,遵循 LIFO(后进先出)
比如:{{}
第二位{是后进的,那么与之匹配的是第三位的}
那么我们用栈的方式思考,
我们把 左括号 认为是无条件push, 右括号 认为是有条件pop,
条件是栈顶的括号一定和右括号匹配
比如(]不符合规则的
还有其他可能的情况需要注意
比如(((它没有右括号所以也是不符合的,
我们可以判断所有push,pop操作后栈顶下标是否>0,大于则代表栈不为空
比如)))
栈顶下标是否<0,如果是则说明少左括号了
答案
1 | #include <bits/stdc++.h> |
给出正整数 $n$,要求按如下方式构造数列:
请你求出,一共有多少个合法的数列。两个合法数列 $a, b$ 不同当且仅当两数列长度不同或存在一个正整数 $i \leq |a|$,使得 $a_i \neq b_i$。
输入只有一行一个整数,表示 $n$。
输出一行一个整数,表示合法的数列个数。
1 | 6 |
1 | 6 |
满足条件的数列为:
对于全部的测试点,保证 $1 \leq n \leq 10^3$。
本题数据来源是 NOIP 2001 普及组第一题,但是原题的题面描述和数据不符,故对题面进行了修改,使之符合数据。原题面如下,谨供参考:
我们要求找出具有下列性质数的个数(包含输入的正整数 $n$)。
先输入一个正整数 $n$($n \le 1000$),然后对此正整数按照如下方法进行处理:
- 不作任何处理;
- 在它的左边拼接一个正整数,但该正整数不能超过原数,或者是上一个被拼接的数的一半;
- 加上数后,继续按此规则进行处理,直到不能再加正整数为止。
这是一道十分纯正的数学问题
如果你是高中生,一定能想到这就是排列组合问题
根据题目我们可以知道,每个数都有两种状态
比如说样例 6
作为根数字它必须延伸(其他数字则可以自由选择延伸或不延伸)
根据说明在一个合法的数列的末尾加入一个正整数,但是这个正整数不能超过该数列最后一项的一半,可以得到一个新的合法数列
floor(i/2)6->3floor(i/2)-16->26->3还可以延展为6->3->1i=1既不能继续延伸也不能同级平移i=1作为边界条件1 | #include <bits/stdc++.h> |
这样是不是就得了?提交代码后发现超时了
我们发现,每一个数字产生的种类只与i有关而与它的父节点无关
所以我们可以用一个数组记录结果,这样就可以避免重复计算
1 | #include <bits/stdc++.h> |
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
例如:给定一个十进制数 $56$,将 $56$ 加 $65$(即把 $56$ 从右向左读),得到 $121$ 是一个回文数。
又如:对于十进制数 $87$:
STEP1:$87+78=165$
STEP2:$165+561=726$
STEP3:$726+627=1353$
STEP4:$1353+3531=4884$
在这里的一步是指进行了一次 $N$ 进制的加法,上例最少用了 $4$ 步得到回文数 $4884$。
写一个程序,给定一个 $N$($2 \le N \le 10$ 或 $N=16$)进制数 $M$($100$ 位之内),求最少经过几步可以得到回文数。如果在 $30$ 步以内(包含 $30$ 步)不可能得到回文数,则输出 Impossible!。
两行,分别是 $N$,$M$。
如果能在 $30$ 步以内得到回文数,输出格式形如 STEP=ans,其中 $\text{ans}$ 为最少得到回文数的步数。
否则输出 Impossible!。
1 | 10 |
1 | STEP=4 |
首先,我们使用cin去将输入数据储存到int N和string M中,
之所以使用string M是因为M.size()可以很方便的获取字符长度
以便后续转移到数组中
得到字符串之后,我们还需要补位,
即最终结果可能有110位,输入的有3位,
我们也要把有效数字前的107位补上
(虽然后续操作也要逆过来找有效数字,但是这样做可以避免进位操作时未指定元素初始值而导致的错误)
while(M.size() < 110)M = '0' + M;
之后使用
1 | for(int i = 0;i<110;i++){ |
将字符串转移到int arr[110]中
其中对Ascii码值操作可以将字符转为对应数组
这个功能是核心,用来判断每一步之后的数字是不是回文数
1 | bool check(){ |
1 | void _step(){//step与万能头里的函数重名了 |
1 | #include <bits/stdc++.h> |
1 | #include <bits/stdc++.h> |
躲猫猫结束咯(麦小鼠音)
1.在输入框输入
1 | /scoreboard objectives add number1 dummy number1 |
2.循环 无条件 保持开启
1 | /scoreboard players set @a number1 -1 |
3.连锁 无条件 保持开启(被2所指)
1 | /execute as @e at @s run scoreboard players add @a[r=16] number1 1 |
16表示范围,可修改
4.连锁 无条件 保持开启(被3所指)
1 | /titleraw @a actionbar {"rawtext": [{"text": "§6附近实体数: §a"}, {"score":{"name": "@s","objective": "number1"}}]} |
不是怎么老贝炸啊TAT
演示视频:
1.循环 无条件 保持开启
1 | /execute as @e[type=chicken] at @s run tp @s ~~~ |
chicken 表示代表的实体,可替换
2.循环 无条件 保持开启
1 | /execute as @e[type=chicken] at @s if entity @a[r=3] run damage @e 10 block_explosion |
3 表示触发范围,
10 表示伤害
这里是一些最常用的 Hexo 命令了
启动服务器
1 | $ hexo server |
自动生成文章
1 | $ hexo generate --watch |
将 Hexo 推送到 github
1 | $ hexo deploy |