暑假学习
m0_46772594
这个作者很懒,什么都没留下…
展开
-
做题总结——王母娘娘又双叒叕来难为茶山牛了
做题总结——王母娘娘又双叒叕来难为茶山牛了原题链接王母娘娘又双叒叕来难为茶山牛了题目题意分析:这道题目是求一个正整数的三次阶乘取模的值,涉及到了数据溢出的问题做题思路:这到题目如果利用暴力的方法,即先求出来三次阶乘的值再取模,数据肯定会溢出。根据题目可以看到m的最大取值是1e9,则根据经验可以知道4的三次阶乘肯定是远远大于1e9的,也就是说当n>=4时,(n!!!)%m一定是等于0的(因为n!!!远大于m);当n=3时,求出3!!!再对m进行取模即可;当0<=n<原创 2020-08-25 23:39:46 · 238 阅读 · 3 评论 -
做题总结——走出迷宫
做题总结——走出迷宫原题链接:走出迷宫题目题意分析:这道题目是有多种解法的,这里看作是一道广度优先搜索的模板题目做题思路:从起点开始,分别向上、下、左、右四个方向进行搜索,如果搜索到了终点,则说明能够到达终点;否则,将该点压入队列之中,继续进行下面的搜索,并将该点标记成已访问。代码实现#include<bits/stdc++.h>using namespace std;char mp[600][600]; int vis[600][600];int dx[4原创 2020-08-25 23:06:48 · 178 阅读 · 1 评论 -
做题总结——造房子
做题总结——造房子原题链接造房子题目题意分析:这道题目是一道比较简单的数学应用题(签到题)做题思路:做题思路以后再补代码实现#include<bits/stdc++.h>using namespace std;#define ll long longint main(){ ll a,b,c,mi,ma,s=0,i; cin>>a>>b>>c; mi=min(a,b); ma=max(a,b); if(c>ma-mi原创 2020-08-23 23:37:29 · 488 阅读 · 0 评论 -
做题总结——虚空之力
做题总结——虚空之力原题链接虚空之力题目题意分析:这道题目是求出一个字符串中能够挑选出对应字符从而组成指定字符串(“king” 或 “kinging”)的数量做题思路:统计出输入字符串中’k’、‘i’、‘n’、‘g’分别对应的个数,从而能够构成的"ing"字符串的个数是取决于i’、‘n’、‘g’三个字符个数最小的那个,由题意可知组成一支礼炮需要一个’k’+一个’ing’,组成两支礼炮需要一个’k’+两个’ing’,由此可以得知如果"ing"的个数>=2倍’k’的个数,则可以构成2倍’k原创 2020-08-23 23:23:57 · 461 阅读 · 0 评论 -
做题总结——使徒袭来
做题总结——使徒袭来题目题意分析:这道题目就是:已知三个正整数的乘积,求出这三个数的和的最小值做题思路:这道题目利用数学知识可以知道,当三个正整数的值相等时,三个数的和最小,相当于a=b=c=n^(1/3)时,(a+b+c) min=3*n ^(1/3),编写代码实现即可。代码实现#include<bits/stdc++.h>using namespace std;int main(){ double n; cin>>n; //doubl原创 2020-08-22 23:37:52 · 767 阅读 · 0 评论 -
做题总结——younik要排号
做题总结——younik要排号题目题意分析:这道题目理解起来不难,就相当于求younik之前有多少个不同的人,再加上一,就是younik是第几个被叫到的人。做题思路:这道题目的数据范围不是特别大,可以利用暴力的方法,对于每一个被叫到的名字,判断在其前输入的名字中是否有相同的名字(即之前是否叫到过这个人),没有则答案加1。代码实现#include<bits/stdc++.h>using namespace std;int main(){ int n,ans=0,i,j原创 2020-08-22 23:26:28 · 404 阅读 · 0 评论 -
做题总结——牛牛爱博弈
做题总结——牛牛爱博弈原题链接牛牛爱博弈题意题意分析:这道题目就是一道典型的博弈理论的题目做题思路:自己再网上看了一些题解,感觉还是没有弄明白这其中的原理,所以就不在这写了,关于数论中博弈原理的各种应用需要自己去进行学习,总之 结论就是当n%3==0时,则牛牛(Alan)必胜;当n%3!=0时,则牛妹(Frame)必胜。代码实现//代码实现十分简单#include<bits/stdc++.h>using namespace std;int main(){ i原创 2020-08-20 22:44:23 · 134 阅读 · 0 评论 -
做题总结——牛牛爱字符串
做题总结——牛牛爱字符串原题链接牛牛爱字符串题目题意分析:这道题目题意比较好理解,就是输出所给字符串中含有的数字,对于有前导零的数字需要注意去掉前导零,同时注意如果只有一个数字0直接输出。做题思路:对所给字符串从头开始遍历。如果当前字符>=‘0’ && <=‘9’,则从该字符开始向后遍历直至字符不再满足该条件,接着对这段区间内的字符转换为整型、去除前导0,接着输出这些数字,接着从下一个字符开始继续判断、重复上述过程。(这个思路感觉写的不太好 QAQ)代码实现原创 2020-08-20 22:28:37 · 153 阅读 · 0 评论 -
做题总结——数字三角形
做题总结——数字三角形题目题意分析:这道题目就是寻找从上至下数值最大的一条路线(与“杨辉三角”十分类似)做题思路:这道题目利用贪心算法肯定是错误的!先介绍一种解法。这道题目可以利用“杨辉三角”的思路,根据一个上面的元素与下面两个元素的递推公式(在动态规划里面称作状态转移方程),从下至上地解决此问题(详细思路以后再补)代码实现#include<bits/stdc++.h>using namespace std;int main(){ int n,a[1010][1010原创 2020-08-19 23:40:24 · 167 阅读 · 0 评论 -
做题总结——中位数
做题总结——中位数题目题意分析:这道题目题意其实并不理解,相当于在插入数据的过程中动态求中位数,每当插入奇数个数据时就求这所有奇数个数据的中位数。做题思路:开始看见这道题目,最暴力的思路肯定就是每当插入奇数个数据时,就将这奇数个数据排序,从而能够求得中位数(但可想而知这样的做法肯定会超时)。 自己还是什么都不会,也没有什么思路,后来通过大神的分析发现其实这道题目有许多种不同的做法,利用了不同的数据结构。这里自己使用的方法是堆的思想,建立一个大顶堆和一个小顶堆,mid代表比较变量(开始时原创 2020-08-19 23:10:54 · 193 阅读 · 0 评论 -
做题总结——单词查找树
做题总结——单词查找树题目题意分析:这道题目就是一道Trie树相关操作的题目(这道题目只涉及了插入操作),求最少的结点数目就相当于输出向Trie树中插入的最后一个结点的序号(注意开始就有根结点)做题思路:按照Trie树的模板来做即可代码实现#include<bits/stdc++.h>using namespace std;#define ll long longconst int maxn = 3e5+5;char s[100];ll sum=1; int tr原创 2020-08-18 19:15:34 · 129 阅读 · 0 评论 -
做题总结——小M和天平
做题总结——小M和天平题目题意分析:根据这道题给出的数据范围可以知道,利用所有的石头能够查询的物体质量是不会查过100*100=10000的,所以可以直接利用暴力枚举的方法进行求解。做题思路:利用一个二维数组dp[i] [j],其中i表示前i个石头,j表示物体质量,如果利用前i个石头能够称出质量为j的物体,则dp[i][j]标记为1,否则为0。如果dp[i-1][j]=1,则可以得出三个结论:dp[i][j]一定等于1、dp[i][j+w[i]]一定等于1、dp[i][abs(j-w[i])]一原创 2020-08-18 19:02:57 · 166 阅读 · 0 评论 -
做题总结——Fear Factoring
做题总结——Fear Factoring原题题意分析:这道题目题意很简单,就是求出[a,b]区间内所有数的因数之和做题思路:开始自己的做法是特别愚蠢的 暴力破解法,也就是分别枚举[a,b]区间里每一个数的因数,最后累加起来,可想而知这种做法肯定是不对的。后面听了学长的讲解,这道题一共有两种思路。枚举从1到sqrt(b)的每一个数i,求出[a,b]能够以i作为因数的最小的那个数,这样就可以得到[a,b]区间内所有可以以i为因数的数,再进行累加即可利用数论分块的方法,具体分析参考数论分块解决原创 2020-08-17 10:55:29 · 129 阅读 · 0 评论 -
做题总结——Delayed Work
做题总结——Delayed Work原题题意分析:这道题目是来计算最低的支付金额,该金额由工人的工资和罚款两部分组成。根据题意描述可知,工资的表达式:MX,罚款的表达式:(KP)/M,因此总金额表达式:MX+(KP)/M,这里K、P、X都是已知的,则该表达式变成了关于M的一个对勾函数,又因为M>0,则根据对勾函数的性质,当M=sqrt((KP)/X)时该表达式取得最小值,但是由于M必须是整数,所以可以在M分别是(int)sqrt((KP)/X)和(int)sqrt((K*P)/X)+1代入验证原创 2020-08-07 22:45:16 · 166 阅读 · 0 评论 -
做题总结—— Latin Squares
做题总结—— Latin Squares原题题意分析:题目就是输入一个二维数组,判断对于二维数组中的每一个数字是否在该数字所在的行、所在的列的只出现一次(相当于数独的概念)。如果是的话,则该二维数组是拉丁方,再判断该数组的第一行、第一列的元素是否按照升序的方式排列的,从而进行对应的输出做题思路:由于输入数据中含有字符,所以存储数据的二维数组需要使用char类型再输入二维数组以及这个矩阵的转置的转换成int型,字符进行对应的转换对于矩阵的每个数字分别记录该数字在其所在行、所在列出现的次数(原创 2020-08-07 22:10:32 · 573 阅读 · 0 评论 -
做题总结——Pawn’s Revenge
做题总结——Pawn’s Revenge题目描述这道题目自己一开始时也没有思路(后来才发现其实也并不难,实在是学的不太好),后来从网上查找了一些资料,大概明白了这道题目的思路。这道题目是在已经有且只有一个K棋子的情况下,通过增加最少数量的的pawn棋子,能够将对方的所有的*棋子全部攻击到,其中K能够攻击其余八个方向,pawn棋子只能攻击左上角以及右上角两个方向。其实这道题目直接利用暴力枚举法进行解决。首先,对所有的棋子构建一个标记数组,判断已有K棋的其余八个方向是否含有星棋,有的话则将那个星棋标记原创 2020-07-20 23:34:51 · 252 阅读 · 0 评论