STL
Rancho__
这个作者很懒,什么都没留下…
展开
-
1022_Digital_Library (30分)
这里提供两种写法, 其实都是一样的,第一种比较快。#include <bits/stdc++.h>using namespace std;map<string,set<string> > mp[6];int main(){ //freopen("in.txt","r",stdin); ios::sync_with_stdio(false); ...原创 2019-12-21 20:58:10 · 97 阅读 · 0 评论 -
CCF 试题编号: 201909-4 试题名称: 推荐系统
这题是stl的综合应用,map要想快,直接上unordered_map,这样查询接近O(1),是不是很嗨皮。思路其实还是很简单的,type+id做个Hash,由于set.insert的第一个返回值是指向该插入元素的迭代器,所以,对于每一个type+id我们都可以存下它对应的迭代器,这样删除不就很快了吗,省去查找。这题是我第一次用c++11的语法, 原谅我的low,嘻嘻,auto还挺好用。#i...原创 2019-12-08 17:46:56 · 243 阅读 · 0 评论 -
The Preliminary Contest for ICPC Asia Xuzhou 2019 K. Center
这题对于能加入最多边缘点的center点,这个点就是最优的center ,对于center点,总共是n^2的,顶多也就1e6,所以直接双重循环就行了, 然后map<pair,set >映射一下,第二个用set是因为虽然同一个中心点,对应的边缘点不会出现两次,但是题目中允许一个点作为边缘点两次 ,所以去重的是自己和自己相同的点。最后输出以下答案就可以了。#include <bi...原创 2019-10-23 11:29:26 · 87 阅读 · 0 评论 -
The Preliminary Contest for ICPC Asia Xuzhou 2019 B. so easy (unordered_map+并查集)
这题单用map过不了,太慢了,所以改用unordered_map,对于前面删除的点,把它的父亲改成,后面一位数的父亲,初始化的时候,map里是零,说明它的父亲就是它本身,最后输出答案的时候,输出每一位数的父亲就好了。#include <bits/stdc++.h>using namespace std;unordered_map<int,int>mp;int f...原创 2019-09-24 11:14:26 · 132 阅读 · 0 评论 -
HDU 1237 简单计算器(栈+stringstream)
提供几份代码,这题的输入可以用stringsteam处理,先处理乘除后处理加减,正常思路,但是后面统计加减法的时候,对栈的运用相当于加了几个括号就错了。正确的简单解法就是,加法,就让正数入栈,减法就让该数的相反数入栈,之后的操作也不会影响该数的正负,这样处理最简单。单栈#include <iostream>#include <sstream>#include &l...原创 2019-09-23 19:40:07 · 120 阅读 · 0 评论 -
HDU-1702-ACboy needs your help again!(Stack)
队列和栈的判空都可以用empty#include <bits/stdc++.h>using namespace std;string oper,stru;int T,M,num;int main(){ cin>>T; while (T--) { cin>>M>>stru; if (str...原创 2019-09-04 14:05:53 · 93 阅读 · 0 评论 -
HDU1276-士兵队列训练问题 (Queue)
题很简单,STL中queue的基本使用。#include <bits/stdc++.h>using namespace std;int N,num;int main(){ scanf("%d",&N); while (N--) { scanf("%d",&num); if (num<=3) { ...原创 2019-09-04 13:51:41 · 151 阅读 · 0 评论 -
HDU1285-确定比赛名次(拓扑+优先队列)
对于拓扑排序,每次能入队的只有入度为0的点,所以用优先队列即可。以及,第一组数据日常卡OJ,这组数据跳了一个点,我的程序这个版本也过不了(其实写了另一个版的),稍微改改更正确。#include <bits/stdc++.h>using namespace std;const int maxn=510;vector<int> vec[maxn];int inde...原创 2019-09-03 22:17:34 · 124 阅读 · 0 评论 -
链式向前星
这个就像vector一样,不过有些题可能会卡STL,所以我们就模拟一个vector。head[i]的意思就是以点i为终点的上一条边的编号,edge[i].next就是与边i有着共同出发点的另外一条边的编号,只要照着vector来理解就行了。下面是代码和图示:我们存储这张图,跑下面的代码:#include &lt;iostream&gt;using namespace std;int c...原创 2019-02-14 14:00:50 · 1065 阅读 · 0 评论 -
UVa-12096-集合栈计算机
这题的话,我们读入操作之后,首先对于空集就是初始化为空。我们可以使用typedef 对于 set 重命名为Set,这样就可以直接用Set()的语法进行空集的初始化了。这题主要是对于集合的处理,我们可以给集合一个映射函数,这个函数对于已知集合就返回该ID,让主函数进行相应的操作。对于未知集合就按序存入暂存区,并给该集合分配一个ID。对于查询这个操作,我们使用map就可以判断。最后我们输出的...原创 2019-02-03 13:04:19 · 116 阅读 · 0 评论 -
UVa-156-反片语
这题比较精妙的是,我们对于单词重排,实际上是进行了标准化的处理,即按照字典序排序。这样的话,这样的话,就很方便地处理了单词的重排问题,我们不需要使用全排列函数进行排列尝试,我们直接化简为一,然后进行比较就可以了。然后我们使用map映射,映射每个单词的出现次数,只有等于一的,我们才输出原版的单词。最后输出的时候我们对于最初读入的单词库,进行遍历,看它的映射值为多少,先写入,再排序,最后输出即可...原创 2019-02-03 10:44:15 · 136 阅读 · 1 评论 -
UVa-10815-安迪的第一个字典
这题主要是使用STL和c++解决的,我们使用set和字符流节省我们的工作量。并且set中的元素不仅不重复,而且还按升序排序,这样写入set的直接输出就可以了。我们读入一行之后,对于是不是字母进行判断,如果是的话,我们就把它转成小写写入,按题目要求;如果不是的话,我们就把它转成空格,这样我们用字符串s初始化ss之后,再按照字符流写入,就可以很方便地只写入单词了。#include &lt;ios...原创 2019-02-02 17:28:48 · 176 阅读 · 0 评论 -
UVa-101-木块问题
这题用vector比较好写,我们设置对应的几个函数,然后进行相应的操作来简化代码,这样才不易出错。对于输入和操作来说我们经分析之后,可以看到最后一个操作时最原始的操作也就是不需要还原任意一个堆任意高度的操作,只需进行移动位置就可以了。对于其它的操作经观察得知,如果含有onto操作,那就要还原b之上的块,如果含有move,那就需要还原a之上的木块。所以我们对应对输入的操作也就出来了,我们只需要...原创 2019-02-02 16:59:21 · 161 阅读 · 0 评论 -
UVa-10474-大理石在哪
lower_bound()的作用是查找“大于或等于x的第一个位置”,但是返回的是地址,所以减去数组的首地址就是偏移量了,也就是整型数字。#include <iostream>#include <algorithm>using namespace std;const int maxn = 10000;int main(){ int n, q, x, a[...原创 2019-02-02 10:54:37 · 253 阅读 · 0 评论