![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
临时
无
大 聪 明
Big Smart
展开
-
蓝桥杯 明码(二进制函数转换)
LINK本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。汉字的字形存在于字库中,即便在今天,1616 点阵的字库也仍然使用广泛。1616 点阵的字库把每个汉字看成是 16 \times 1616×16 个像素信息。并把这些信息记录在字节中。一个字节可以存储 88 位信息,用 3232 个字节就可以存一个汉字的字形了。 把每个字节转为 22 进制表示,11 表示墨迹,00 表示底色。每行 22 个字节,一共 1616 行,布局是:第 1 字节,第 2 字节第 3 字节,第原创 2022-04-02 11:05:52 · 138 阅读 · 2 评论 -
51Nod - 1384 全排列
链接给出一个字符串S(可能有重复的字符),按照字典序从小到大,输出S包括的字符组成的所有排列。例如:S = “131”,输出为:113131311Input输入一个字符串S(S的长度 <= 9,且只包括0 - 9的阿拉伯数字)Output输出S所包含的字符组成的所有排列SampleInputcopy 1312Outputcopy1312112311321213123113121321211321312311311231213211分析:全排列函数或原创 2022-04-01 11:40:49 · 360 阅读 · 0 评论 -
L2-020 功夫传人( vector容器表示邻接表 )
分析:先输入建立一个邻接表,然后从祖宗点开始遍历!千万不从循环从小到大!遍历完祖宗接着遍历祖宗下的点,一连串下去,如果从小的点到大的点排序有的点自己还没有更新就去更新下边的点是错的!!!!:double和int型相乘会变0 一定要转换AC代码:#include<bits/stdc++.h>#include<vector>using namespace std;const int N=100100;vector<int> v[N];double ans,z.原创 2022-03-21 19:49:01 · 188 阅读 · 0 评论 -
CodeForces - 1519D Maximum Sum of Products(dp 减枝优化)
链接题意:分别给出各含有n的元素的ab数组,sum为a[i]b[i],现在可以使一个连续的子区间反转相乘,问你最大sum为多少分析:先求出一般情况下sum,开两个for循环作为初末点,然后用深搜来反转,dp记录的是反转的变化值,所以最后求得的最大值还要加上sum*AC代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;int inf=0x3f3f3f3f;const int N=5050;ll原创 2022-03-17 21:14:08 · 289 阅读 · 1 评论 -
k倍区间(思维题)
传送门分析:区间序列之和是k的倍数,首先想到暴力 10的5次会超时;如果两个区间之间的差值是k的倍数,则中间的数满足k倍区间;所以用前缀和记录一下,再遍历用乘法原理。#include<bits/stdc++.h>using namespace std;long long sum,yushu[100010];int main(){ int n,k,x; long long count=0;; scanf("%d%d",&n,&k); f原创 2022-03-11 10:39:52 · 255 阅读 · 0 评论 -
野比大雄的作业(二进制)
链接题意:寻找一个区间,求结果最大的。and:二进制同时为1才为1,否则为0.or:二进制有一个为1就为1,否则为0;分析:结论:只有一个最大的数字它的and和or最大。因为:and必须第一个数是1的地方第二个必须是1,or必须第一个是0的情况第二个是1才能使ans变大,且第一个数应该越大越好,这样无法满足。所以只能使用最大的一个数,ans为max*2;#include<bits/stdc++.h>using namespace std;long long a[100100];i原创 2022-03-11 09:15:51 · 201 阅读 · 0 评论 -
LibreOJ - 10135 祖孙询问(LCA查询最近公共祖先)
链接题意:给出两个数,查询这两个数是否在同一个大的分支里分析:模板题,最后LCA查询的时候如果一个是另一个的祖先,则满足条件。#include<bits/stdc++.h>using namespace std;const int N=40010,D=50;int head[N],deep[N],fa[N][1000];//1000代表层数,要尽量大点,否则结果出错 int num; struct node{ int to,nex;}e[2*N];void add(int原创 2022-03-08 09:11:05 · 122 阅读 · 0 评论 -
Fibonacci 第 n 项 (矩阵乘法 快速幂)
链接题意:F[ 1 ] = 1 , F[ 2 ] = 1 , F[ 3 ] = F[ 2 ] + F[ 1 ] ,…F[ n ] = F[ n-1 ] + F[ n-2 ]。给你两个数 n 和 m ,求第 n 项斐波那契对 m 求余的值。矩阵构造方法:转载ac代码:#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;typedef long long ll;l原创 2022-01-21 20:53:08 · 434 阅读 · 0 评论 -
反素数 Antiprime(数论)
题意:如果一个大于等于 11 的正整数 nn,满足所有小于 nn 且大于等于 11 的所有正整数的约数个数都小于 nn 的约数个数,则 nn 是一个反素数。譬如:1, 2, 4, 6, 12, 241,2,4,6,12,24,它们都是反素数。请你计算不大于 nn 的最大反素数。输入格式一行一个正整数 nn。输出格式只包含一个整数,即不大于 nn 的最大反素数。首先,这题需要用到两个定理:唯一分解定理以及因数个数定理分析;唯一分解定理:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分原创 2022-01-20 20:52:56 · 569 阅读 · 0 评论 -
点的距离(LAC)
链接题目描述给定一棵 nn 个点的树,QQ 个询问,每次询问点 xx 到点 yy 两点之间的距离。输入格式第一行一个正整数 nn,表示这棵树有 nn 个节点;接下来 n-1n−1 行,每行两个整数 x,yx,y 表示 x,yx,y 之间有一条连边;然后一个整数 QQ,表示有 QQ 个询问;接下来 QQ 行每行两个整数 x,yx,y 表示询问 xx 到 yy 的距离。输出格式输出 QQ 行,每行表示每个询问的答案。样例Input Output61 21 32 42 53 6原创 2022-01-08 20:53:52 · 426 阅读 · 0 评论 -
花神游历各国(区间查询 区间开方修改 并查集标记 直接跳着改)
传送门题意:给你一个含有n个字符的序列,进行两种操作,每行三个整数 x,l,r,当 x=1 时询问游历国家 l到 r 的区间总和,当x=2时,区间的每个数字都变为该数字开方后的数值。分析:区间修改开方数值,如果暴力修改的话会超时。优化:有一些区间多次开方就是变为1,如果是1的下次就跳过了,所以用并查集,如果发现<=1(还有初值可能为0的情况,其他开方的数都大于1),则父节点标为该点的值+1,下次遍历就跳过这个到下下个数了。ac代码:#include<stdio.h>#inclu原创 2022-01-07 20:21:47 · 459 阅读 · 0 评论 -
Balanced Lineup(线段树)
链接分析:模板是每个结点都标记其所有子树的和,该题要求某个区间的最大和最小的差值,所以要建结构体,每个节点都要记录包括其所有子树下的最大值,和最小值,然后通过区间就可以直接查找出来。AC代码:#include<stdio.h>#include<string.h>#include<algorithm>typedef long long ll;using namespace std;int a[50010];struct node{ int l,原创 2022-01-05 20:55:14 · 217 阅读 · 0 评论 -
简单题 (树状数组)
链接分析:首先区间操作,区间查询,很容易想到 RMQ ,然后树状数组和线段树貌似没有翻转区间信息的功能啊。那么我们考虑一下这道题的性质:最后得到的数字只可能是 0 或 1 也就是说如果某个位置被翻转两遍那么效果是一样的。。。然后要非常生硬的联想到位运算 & …接下来我们这么操作(鉴于树状数组常数小那么就用树状数组的讲法了,至于线段树也就是永久化标记的事儿):我们每次直接去加一个区间的左端点 l 以及右端点 r+1 ,那么 r+1 以及后面位置上的数被翻转了两次,最低位还是不变查询的时候原创 2022-01-04 20:57:17 · 114 阅读 · 0 评论 -
数星星(树状数组)
链接天空中有一些星星,这些星星都在不同的位置,每个星星有个坐标。如果一个星星的左下方(包含正左和正下)有 kk 颗星星,就说这颗星星是 kk 级的。stars1.png例如,上图中星星 55 是 33 级的(1,2,41,2,4 在它左下),星星 2,42,4 是 11 级的。例图中有 11 个 00 级,22 个 11 级,11 个 22 级,11 个 33 级的星星。给定星星的位置,输出各级星星的数目。一句话题意 \ 给定 nn 个点,定义每个点的等级是在该点左下方(含正左、正下)的点的数目原创 2022-01-03 20:57:29 · 268 阅读 · 0 评论 -
#10094. 「一本通 3.5 练习 2」消息的传递(tarjan查找入度)
哆啦B梦的传送门题意:给出几条单向边,问你可以构成几个强连通量!分析:tarjan模板时,需要标记每个点属于哪个强连通分量。完了要遍历每一条边,如果有一条边的两个点不属于通一个强连通分量,就把终点标记上,代表入度。最后遍历有几个入度为0的点,代表强连通量的数量。AC代码:#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int num,n,m,top,sum原创 2021-12-11 11:07:22 · 241 阅读 · 0 评论 -
HDU - 5687 Problem C(字典树的添加,查询,删除)
LINK度熊手上有一本神奇的字典,你可以在它里面做如下三个操作:1、insert : 往神奇字典中插入一个单词2、delete: 在神奇字典中删除所有前缀等于给定字符串的单词3、search: 查询是否在神奇字典中有一个字符串的前缀等于给定的字符串Input这里仅有一组测试数据。第一行输入一个正整数N (1\leq N\leq 100000)N(1≤N≤100000),代表度熊对于字典的操作次数,接下来NN行,每行包含两个字符串,中间中用空格隔开。第一个字符串代表了相关的操作(包括: inser原创 2021-11-19 20:04:00 · 108 阅读 · 0 评论 -
POJ - 3630 /#10049. 「一本通 2.3 例 1」Phone List(字典树模板题)
就™你叫“传送门”啊~秋雅是我弟妹!分析:样例中前缀在含有前缀的字符串前边,还有一种可能就是字符串先输入,再输入其含有的前缀字符串。所以可以在插入函数中记录该字符出现的次数(如果 后缀后出现,后缀的最后尾字母次数大于1说明前边有字符串了)和标记最后一个字母的位置(标记可能出现的后缀)。标记的三个数组一定要大于十万,n最多有一万个字符串,每个字符串最好含10个字符。AC代码:#include<stdio.h>#include<algorithm>#include<原创 2021-11-18 19:56:43 · 584 阅读 · 0 评论 -
就是玩哎就是玩~
这也太好玩了吧原创 2021-11-16 16:16:51 · 583 阅读 · 0 评论 -
负数取模【总结】
整数除法取整考虑这样一个计算题:18 除以 5,要得到一个整数结果,究竟应该是 3 还是 4?这就是一个问题了。计算机上有几种对于结果取整的方法:向上取整,向+∞方向取最接近精确值的整数,也就是取比实际结果稍大的最小整数,也叫 Ceiling 取整。这种取整方式下,17 / 10 == 2,5 / 2 == 3, -9 / 4 == -2。向下取整,向-∞方向取最接近精确值的整数,也就是取比实际结果稍小的最大整数,也叫 Floor 取整。这种取整方式下,17 / 10 == 1,5 / 2 == 2,原创 2021-11-05 17:51:04 · 648 阅读 · 0 评论 -
HDU - 2087 剪花布条(KMP模板)
传送门一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?Input输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。Output输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。Sample In原创 2021-11-01 17:09:50 · 136 阅读 · 0 评论 -
HDU - 2546饭卡之霸王餐(01背包)
我是传送门电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。Input多组数据。对于每组数据:第一行为正整数n,表示菜的数量。n<=1000。第二行包括n个正整数,表示每种菜的价格。价格不超过50。第三行包括一原创 2021-07-27 22:15:42 · 75 阅读 · 0 评论 -
比那名居的桃子(前缀和 区间查找)
传送门题意:输入n和m,n天的快乐值和羞耻度分两行给出,让你按要求选出适合的区间(连续的n天).分析:最多有十亿组数据,所以千万不要开双层循环。那怎么找最大最小区间呢?用前缀和记录,然后再看一个循环寻找在这过程中就可以直接按要求筛选了。所以一定要将复杂的问题简单化#include<stdio.h>#include<algorithm>using namespace std;int inf=9999999;long long a[1100000],b[1100000原创 2021-10-16 17:45:56 · 169 阅读 · 0 评论 -
51Nod - 1095 Anigram单词(map容器)
链接┗|`O′|┛ 嗷~~一个单词a如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的Anigram,例如单词army和mary互为Anigram。另:相同的2个单词不算Anigram。现在给定一个字典,输入Q个单词,从给出的字典中找出这些单词的Anigram。Input第1行:1个数N,表示字典中单词的数量。(1 <= N <= 10000) 第2 ~ N+1行,字典中的单词,单词长度 <= 10。 第N+2行:查询的数量Q。(1 <= Q <= 100原创 2021-10-15 10:56:33 · 236 阅读 · 0 评论 -
计蒜客 T1817 分解质因数(数论)
传送门奥编写一个把整数N分解为质因数乘积的程序。比如分解210,可以写成210=235*7,请按这个格式输出。输入格式一个整数N(2≤N≤109)。输出格式输出把N拆成几个质数相乘的形式,质数必须从小到大相乘。Sample Input120Sample Output120=22235这只是复杂度较低的一种分解质因数;#include<stdio.h>int main(){ int n,i; scanf("%d",&n);原创 2021-08-27 08:45:25 · 498 阅读 · 0 评论 -
%lf和%f的部分区别
scanf函数是通过指针指向变量的。%f告诉scanf函数在所传地址位置上存储一个float型值, 而%lf告诉scanf函数在所传地址位置上存储一个double型值。这里float和double的区别是非常重要的。如果给出了错误的转换说明,那么scanf函数将可能存储错误的字节数量(没有提到的是,float型的为模式可能不同于double型的位模式)。 Taku —— SegmentFault上的回答输入时:float型输入用%fdouble型输入用%lf输出时:最好是都用%f输出.原创 2021-08-20 09:12:53 · 881 阅读 · 0 评论 -
HDU1387Team Queue(队列,map函数)
LINK题意:给出t个集合,每个集合各自有n个元素(每个集合的元素数不一定相同),•ENQUEUE x -将元素x放入队伍队列•DEQUEUE——处理第一个元素并将其从队列中移除•STOP停止—测试用例的结束;每次输入dequeue都要输出当前队列中删除的第一个元素。分析:开始先将各集合的元素用数据标记上属于哪个集合,有元素放入队列的时候先讨论是否当前的集合名已经在队列中了,如果没有,把集合名放进队列里。接着把这个元素放入它所属的集合里(这是开的两个队列)。删除的时候如果删除的这个元素它的集合原创 2021-08-15 17:21:46 · 83 阅读 · 0 评论 -
HDU - 1269迷宫城堡(强连通分量tarjan模板,邻接表模板)
传送门为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只说明可以通过这个通道由A房间到达B房间,但并不说明通过它可以由B房间到达A房间。Gardon需要请你写个程序确认一下是否任意两个房间都是相互连通的,即:对于任意的i和j,至少存在一条路径可以从房间i到房间j,也存在一条路径可以从房间j到房间i。Input输入包含多组数据,输入的第一行有两个数:N和M,接下来原创 2021-08-13 12:41:05 · 206 阅读 · 0 评论 -
UVA - 10054The Necklace(欧拉回路输出路径)
传送门题意:给出n条线,判断是否可以组成欧拉回路,如果可以,输出其中的一种欧拉回路;分析:无向欧拉回路:所有顶点都有偶数的度;输入点的过程中,记录起点终点的度数,同时正向反向边都加1,没有必要找孤立点;输出有多种可能,随便以路径中的一个点开始都可以,使用深搜;保证第一个和最后一个一定是相连的:只要度数都是偶数,就一定符合欧拉回路,所以肯定能回到第一个;ac代码:#include<stdio.h>#include<string.h>#include<algorit原创 2021-08-11 10:36:10 · 141 阅读 · 0 评论 -
前三位,后三位(对数的整数小数,快速幂)
LINKYou are given two integers: n and k, your task is to find the most significant three digits, and least significant three digits of nk.InputInput starts with an integer T (≤ 1000), denoting the number of test cases.Each case starts with a line conta原创 2021-07-11 16:10:02 · 262 阅读 · 0 评论