
ACM
风吹草地现牛羊的马
这个作者很懒,什么都没留下…
展开
-
python迪杰斯特拉最短路径算法
def findCheapestPrice(n, flights, src): MAX = 1000000 graph = [[MAX] * n for _ in range(n)] visited = [False] * n dist = [MAX] * n dist[src] = 0 for u, v, w in flights: graph[u][v] = w if u == src: dist[原创 2021-08-20 22:42:48 · 303 阅读 · 0 评论 -
python实现常见排序算法
归并排序def sort(array, l, r): if l == r: return mid = (l + r) // 2 sort(array, l, mid) sort(array, mid + 1, r) merge(array, l, mid, r)def merge(array, l, mid, r): tmp = [] i = l j = mid + 1 while i <= mid and原创 2021-03-11 11:09:38 · 174 阅读 · 0 评论 -
What Are You Talking About HDU - 1075(字符串,未AC)
不知道为什么,一直Runtime error,哪位大神可以指点一二#include &lt;iostream&gt;#include &lt;string&gt;using namespace std;typedef struct Node{ string a; string b;}Node;string start;Node dict[3000];string s...原创 2019-01-14 09:51:00 · 139 阅读 · 0 评论 -
What Are You Talking About HDU - 1075(字典树,已AC)
字典树:1、基本概念 字典树,又称为单词查找树,Tire数,是一种树形结构,它是一种哈希树的变种。 2、基本性质根节点不包含字符,除根节点外的每一个子节点都包含一个字符从根节点到某一节点。路径上经过的字符连接起来,就是该节点对应的字符串每个节点的所有子节点包含的字符都不相同3、应用场景 典型应用是用于统计,排序和保存大量的字符串(不仅限于字符串),经常被搜索引擎系统用于文...原创 2019-01-14 12:14:06 · 198 阅读 · 0 评论 -
What Are You Talking About HDU - 1075(使用map来做)
map 是STL中的关联容器,map中的元素由&lt;key, value&gt;对构成,而且key和value的数值类型可以是任意类型。使用map要包含头文件 map标题map的声明map&lt;string,string&gt; dict; //第一种typedef map&lt;string,string&gt; MAP; //第二种 MAP dict;标原创 2019-01-14 15:14:55 · 195 阅读 · 0 评论 -
统计难题 HDU - 1251(字典树,getline的使用)
本题用字典树即可,在每个节点上设置一个计数变量cnt,用于统计从根节点到本节点的前缀的数量。#include <iostream>#include <string>#include <string.h>using namespace std;typedef struct Node{ int cnt; Node *child[26]; N...原创 2019-01-15 09:34:03 · 163 阅读 · 0 评论 -
统计难题 HDU - 1251(map解法)
结题思路:用map来做,思路还是要将输入的字符串分割为一个个前缀,然后统计前缀的个数。#include <iostream>#include <map>#include <string.h>using namespace std;map<string, int> dict;int main(){ char str[11];...原创 2019-01-15 10:05:27 · 333 阅读 · 0 评论 -
A + B Problem II HDU - 1002(简单string)
#include <iostream> #include <string>#include <algorithm>using namespace std;string sum(string a, string b){ if(a.length() < b.length()) { string tmp = a; a = b; b ...原创 2019-01-15 10:49:56 · 339 阅读 · 0 评论 -
Encoding HDU - 1020(cstring)
要注意的是,对于AABBCA应输出2A2BCA,而不是3A2BC#include <stdio.h>#include <string.h>int main(){ char str[10001]; int n; scanf("%d", &n); while(n--) { scanf("%s", str); int k = 1; fo...原创 2019-01-15 12:09:44 · 110 阅读 · 0 评论 -
c++ 标准库中string类的常用操作
#include &lt;iostream&gt;#include &lt;string&gt;using namespace std;int main(){ string str = "1234abcd56789"; //截取 string str1 = str.substr(0, 5); //截取从0~4之间的字符串,不包括5 string str2 = str....原创 2019-01-21 11:07:13 · 208 阅读 · 0 评论 -
Hat’s Words HDU - 1247(字典树)
结题思路:本文要判断一个单词是否是由两个输入中的单词组成的,可以借助字典树来完成,将一个单词分成两部分(可以借助string类的substr函数来完成),然后分别判断这两部分是否是字典树的的两个单词即可#include <iostream>#include <string>#include <string.h>using namespace std...原创 2019-01-21 11:46:27 · 115 阅读 · 0 评论 -
二叉树的遍历 HRBUST - 2040(未AC)
小菜鸡,这道题都没AC,伤心了#include <stdio.h>#include <malloc.h>typedef struct Node{ int num; struct Node *lchild, *rchild;};void build(Node* root, int *pre, int *in, int l2){ root = (No...原创 2019-01-22 11:45:25 · 196 阅读 · 0 评论 -
谁是你的潜在朋友 OpenJ_Bailian - 4002(水题)
#include <stdio.h>int list[200]; //用户感兴趣的书 int num[200]; //书的统计 int main(){ int n, m; scanf("%d %d", &n, &m); int a; for(int i = 0; i < n; i++) { scanf("%d", &a)...原创 2019-01-22 12:05:21 · 960 阅读 · 0 评论 -
放苹果 POJ - 1664(递归)
#include <stdio.h>int dfs(int m, int n) //n是苹果,m是盘子 { //递归结束的条件是只有一个盘子或者没有苹果 if(m == 1 || n == 0) return 1; //当盘子个数>苹果个数时,至少有m-n个盘子用不到,所以最多只用n个盘子,此时的解与dfs(n,n)等价 if(m > n)...原创 2019-01-22 19:02:57 · 229 阅读 · 0 评论 -
显示器 OpenJ_Bailian - 2745(打表)
结题思路:本题其实难度不大,就是有点繁琐,首先用一个map来存储数字,题目可知,一个数字占s+3列(因为每个数字之后还有一列空格),每个数字需要考虑的就是3行2列,3行是第0行,第s+1行,第2s+2行,两列是最左边一列和最右边一列,其他地方都是空格。对于第i个数字来说,最左边的列号是i(s+3),最右边的列号是(i+1)*(s+3)-1。#include <stdio.h>#...原创 2019-01-23 14:04:24 · 307 阅读 · 0 评论 -
C++的强制类型转换
在做除法运算时,分子分母都是int类型,要求化成小数形式,这时就需要强制类型转换。要注意的时,当从int转化为double类型时,会提高精度,而从double转化为Int时会降低精度,这是由于int类型占4字节,而double占8字节导致的。int x = 11;double y = (double)x / 2; //法一double z = x / 2.0; ...原创 2019-02-21 13:28:05 · 291 阅读 · 0 评论 -
复旦17机考题-ISBN码----ISBN HDU - 2714
没有找到原题,找到了类似的一个题,HDU-2714#include <iostream>#include <string>using namespace std;//100000001?int main(){ string str; while(cin >> str) { int sum = 0, k = 0; for(int ...原创 2019-02-21 14:38:25 · 220 阅读 · 0 评论 -
复旦17年机考题-最小生成树--Jungle Roads HDU -1301
机考题说的是一个无向图,顶点为N个,其中M条边已给定,现在要从K条备选边中选出若干条,使得整个图连通,且选出的边权值和最小。我的想法是用最小生成树来做,由于没有找到原题,故用POJ-1251求最小生成树来代替。但是这道题本地编译没问题,在OJ上提交时一直到runtime error,哪位大佬可以看看?#include &lt;stdio.h&gt;#include &lt;algorit...原创 2019-02-21 18:23:27 · 379 阅读 · 0 评论 -
Jungle Roads HDU - 1301(最小生成树-并查集)
#include &lt;stdio.h&gt;#include &lt;algorithm&gt;using namespace std;struct Node{ int a, b; int w;}list[100];int t[50];bool cmp(Node a, Node b){ return a.w &lt; b.w;}int fi...原创 2019-02-21 18:28:06 · 167 阅读 · 0 评论 -
复旦16机考题-最长公共子串
给定两个字符串,求最长的公共子串的长度解题思路,用string类自带的substr()和find()函数substr的用法substr(pos, n),截取从pos开始的长度为n的字符串,若n>str.length(),则截取从pos开始到str末尾的子串串,若pos>str.length()-1,则报错。find()的用法str.find(str1),返回str1...原创 2019-02-21 20:24:13 · 230 阅读 · 0 评论 -
复旦16年机考题-后缀表达式求值
首先回顾一下如何由中缀表达式转为前缀和后缀,以中缀表达式9+(5-4)-6+7为例。转为后缀表达式的规则从左到右扫描中缀表达式,若遇到数字,则将其输出。若遇到运算符,1.若为“(”则将其入栈。2.若此时栈为空或者栈顶为"(",则将其入栈。3.当前运算符优先级大于栈顶运算符优先级,则将其入栈,反之(也就是小于等于),则一直将栈顶运算符出栈,直到当前运算符优先级大于栈顶运算符优先级为止...原创 2019-02-22 10:56:53 · 880 阅读 · 0 评论 -
复旦16年机考题--哈夫曼编码--Safe Or Unsafe HDU - 2527
题目是是给定一个字符串,求哈夫曼编码的最短长度,没有找到原题,故用HUD-2527来代替。解题思路:思路是哈夫曼树的非叶子结点权值和为哈夫曼编码的最短长度,使用优先队列来实现。值得注意的是aaaa 的哈夫曼编码为其长度,为4。#include <iostream>#include <string>#include <queue>#include &...原创 2019-02-22 12:26:09 · 505 阅读 · 0 评论 -
复旦15年机考题--求正方形个数
题目大意是给出长方形的长和宽,每次从长方形里撕去最大的正方形,输出最后能得到多少正方形解题思路:每次从长中减去宽,当长为0或者宽为0时停止。#include <stdio.h>int main(){ int len, wid; while(scanf("%d %d", &len, &wid) != EOF) { int a = len > ...原创 2019-02-22 13:57:31 · 452 阅读 · 0 评论 -
Image Perimeters POJ - 1111(bfs)
解题思路:本题是求含有X块的周长,即要求出在边缘的X和旁边有**.**的X,只要在结点出队的时候加以判断即可。#include <stdio.h>#include <string.h>#include <queue>using namespace std;struct Node{ int x, y;};queue<Node>...原创 2019-02-11 12:37:06 · 189 阅读 · 0 评论 -
复旦15年机考题
问题:给出a,b,c(3个整数),判断a,b能否通过±*/得到c,ab可以交换位置,可以输出YES,不行输出NO#include &lt;stdio.h&gt;int main(){ int a, b, c; while(scanf("%d %d %d", &amp;a, &amp;b, &amp;c) != EOF) { bool flag = false; if(原创 2019-02-22 14:39:04 · 491 阅读 · 3 评论 -
PAT--1077 Kuchiguse
本题是要找到日本人偏爱的字符串,也就是每个字符串末尾都公有的最长的子串。解题思路:以第一个字符串list[0]为外层循环,从后往前遍历,每次得到一个子串substr,然后在其余的字符串list[1~n-1]中寻找,若都存在,则继续加长substr,若有一个不存在,则跳出循环。#include <iostream>#include <string>using n...原创 2019-02-27 15:24:25 · 181 阅读 · 0 评论 -
PAT---1081 Rational Sum
题目是要输出几个分数的和,输出结果要求是输出真分数或带分数。解题思路:计算过程中会用到求最大公约数(分子分母约分)和最小公倍数(求通分后的分母)的算法,而且考虑到本题数据比较大,故用long long来实现。#include <stdio.h>#include <map>using namespace std;long long gcd(long long...原创 2019-02-27 16:22:30 · 178 阅读 · 0 评论 -
PAT--1084 Broken Keyboard
用了两种方法,但都有一个测试用例没有通过,要疯了。。。。两种思想都是先将小写转为大写,之后遍历。#include &lt;iostream&gt;#include &lt;string&gt;using namespace std;void cap(string &amp;s){ for(int i = 0; i &lt; s.size(); i++) i...原创 2019-02-27 17:59:08 · 187 阅读 · 0 评论 -
PAT--1092 To Buy or Not to Buy
用map计数即可#include <iostream>#include <map>#include <string>using namespace std;map<char, int> dict;int main(){ string str1, str2; while(cin >> str1 >...原创 2019-02-27 19:53:43 · 122 阅读 · 0 评论 -
PAT--1096 Consecutive Factors
参考 https://www.liuchuo.net/archives/2110。思路:一个数的因数大于sqrt(n)的数只能有一个,且其余因数都小于sqrt(n)。故当一个数的因数有两个及以上时,最大上限不超过sqrt(n)+1。由于是连乘的,所以只要记录第一个数first和长度max即可#include <iostream>#include <cmath>...原创 2019-02-27 23:06:19 · 140 阅读 · 0 评论 -
PAT-1005 Spell It Right
用字符串即可#include &lt;iostream&gt;using namespace std;int main(){ string str; while(cin &gt;&gt; str) { int sum = 0; for(int i = 0; i &lt; str.length(); i++) sum += str[i]-'0'; string...原创 2019-02-23 22:26:34 · 103 阅读 · 0 评论 -
PAT-1008 Elevator
20分的题确实很水。。。#include <iostream>using namespace std;int list[100];int main(){ int n; while(cin >> n) { for(int i = 0; i < n; i++) cin >> list[i]; int sum = 0;...原创 2019-02-23 22:47:21 · 141 阅读 · 0 评论 -
PAT---1100 Mars Numbers
解题思路:设置两个字符串数组,list和base,其中list数组中存放的是13的倍数,分别是13的1倍, 2倍,3倍。。。#include <iostream>#include <string>using namespace std;string list[12] = {"tam", "hel", "maa", "huh", "tou",原创 2019-02-28 11:32:47 · 126 阅读 · 0 评论 -
PAT--1104 Sum of Number Segments(数学题)
自己写了一个,发现会超时,然后网上说有公式可以用,第i个数出现的次数为i(n-i+1),其中i>= 1;具体的推导过程还未知。。。#include <stdio.h>int main(){ int n; while(scanf("%d", &n) != EOF) { double sum = 0, x = 0; ...原创 2019-02-28 12:26:57 · 128 阅读 · 0 评论 -
PAT--1108 Finding Average
使用cout输出小数点后指定位数用cout << setiosflags(ios::fixed)<< setprecision(2) << a << endl;当然也可以使用printf("%.2f", a);#include <iostream>#include <string>#include <原创 2019-02-28 13:56:41 · 110 阅读 · 0 评论 -
PAT---1112 Stucked Keyboard
解题思路:遍历字符串,遇到重复的就开始计数,然后判断重复的个数是否是n的倍数,之后还要判断这个字符在字符串中的其他地方是否也是重复出现的,若是则添加,若不是则不添加。输出时每次遇到重复的字符就跳过n个,继续输出。#include <iostream>#include <string>using namespace std;//用于判断是否出现3 casss_s...原创 2019-02-28 15:40:11 · 166 阅读 · 0 评论 -
PAT---1001 A+B Format
解法一利用字符串#include <iostream>#include <string>#include <algorithm>using namespace std;int main(){ int a, b; while(cin >> a >> b) { bool flag = false; //判断...原创 2019-02-19 13:11:12 · 98 阅读 · 0 评论 -
PAT--1116 Come on! Let's C
需要注意的是,第一次输入的是排名,第二次输入的查询。#include <iostream>#include <set>#include <map>using namespace std;map<int, int> dict;set<int> s;bool isPrime(int x){ if(x <...原创 2019-02-28 16:34:27 · 109 阅读 · 0 评论 -
PAT--1120 Friend Numbers
#include <iostream>#include <set>using namespace std;set<int> dict;int main(){ int n, k; while(cin >> n) { for(int i = 0; i < n; i++) { ...原创 2019-02-28 16:47:28 · 109 阅读 · 0 评论 -
PAT--Raffle for Weibo Followers
#include <iostream>#include <map>using namespace std;int main() { int m, n, s; scanf("%d%d%d", &m, &n, &s); string str; map<string, int> mapp; ...原创 2019-02-28 17:42:07 · 123 阅读 · 0 评论