it++

c++ map 官方样例

╄→尐↘猪︶ㄣ 提交于 2021-02-13 10:02:22
#include <iostream> #include < string > #include <iomanip> #include <map> template <typename Map> void print_map(Map& m) { std::cout << ' { ' ; for (auto& p : m) std::cout << p.first << " : " << p.second << ' ' ; std::cout << ' } ' << std::endl; } struct Point { double x, y; }; struct PointCmp { bool operator ()( const Point& lhs, const Point& rhs) const { return lhs.x < rhs.x; } }; int main() { using namespace std; // freopen("d: // 1.text", "r", stdin); // default constructor std::map<std:: string , int > map1; map1[ " something " ] = 69 ; map1[ " anything " ] = 199 ; map1[ " that thing " ]

[NOIP2018]赛道修建

江枫思渺然 提交于 2021-01-04 08:02:21
闲来无事,特意回味一下去年担当NOIPD1T3 (防AK却没能防住) 之大任的经典好题。 首先看到什么“最短赛道的长度尽可能大”,就知道离不开二分。于是我们想到了一种思路:二分+树上贪心。 二分判定很简单,就是对于二分出来的答案mid,检查树上是否有大于m条不相交的,权值和大于mid的链。而如何凑出尽可能多的权值和大于mid的链并使得它们互不相交,成为了这道题的关键之处。 树上贪心。 贪心策略不是很容易设计,下面给出一种:据题意可知,赛道的构建方式有且只有两种,1)一条链直接作为赛道(如下图中类似于红色的构建方式),2)两条半链(半链的理解对于这个题十分重要,请务必好好理解!)拼成一个赛道(因为不能走回头路因此最多只能两条拼)。我们对于以i为根的子树,先尽可能多的拼出赛道,同时在剩下拼不成整条赛道的情况下,选尽量长的传给父节点,作为父节点半链的候选答案。 根据题意及描述以及样例,易得这是一棵树,我们可以把1号节点作为根,从它开始进行搜索,对于每一个节点i,按照上面的贪心策略进行处理。 同时我们又会遇到一个问题:如何处理半链的拼接呢?显然,当子节点的最优长度加上本条边的长度>=Mid时,直接拼就可以了,如果不能的话,就把它放到multiset中进行维护,二分寻找最短的与当前长度的半链可以拼成整链的半链,如果找不到就打擂台取最大值,把最大的传上去即可。之后我们就可以开心地玩STL了~~

【美团面试题】——图遍历

梦想的初衷 提交于 2020-12-28 08:04:01
题目: 给定一个包含N个节点的连通图,节点编号1到n。共有n-1条边。从1号节点出发,问遍历所有节点最短路程多少? 数据输入方式:共n行,第一行是节点个数。下面的n-1行每一行为两个正整数,代表互相连通的两个节点。 !@#¥%: 题目没有明确1号节点是否在图的边缘,也没有提到图的复杂度如何。 网上看了几个别人的程序,但有的程序太过简单,稍微复杂一点的图结果就不对了。下来在VS里编了下,没有调用别的复杂的库,只是用了 vector 。 我这个程序虽然能应对复杂一点的图,但还不是可以应对所有情况,限制条件为: 1)1号节点必须在图的边缘; 2)分支深度不能大于1。如下图,左面的分支为 6-7、6-8,深度均为1;右图分支为 6-7、6-8-9,深度为1和2。 程序(C++): 头文件 map_gao.h #pragma once #include<vector> #include<iostream> using namespace std; namespace gao{ class node { public: node() :used(false), num(0) {} bool used; //是否已被cull int num; //连接的节点数 vector<int> neigh; //邻居节点序号 vector<int> getchild_id() { return neigh

华为2019秋招笔试真题

别来无恙 提交于 2020-11-24 09:45:39
题目:请您写一个reverseAdd函数,该函数根据输入的两个正整数a和b,然后分别将他们的数字按照高位在右边的方式反转后求和。 例如:reverseAdd(123,456)== 321 + 654 == 975 程序原型:int reverseAdd(int a,int b) 输入:输入的a,b参数均为有效取值范围[1,70000]区间上的正整数。 输出:通过函数返回值输出结果;若输入的a或者b参数超出取值范围(小时1或者大于70000),则应输出-1;否则应按照要求输出数字反转后的和。 代码如下: #include " iostream " #include " algorithm " #include " string " using namespace std; int main() { string a,b; while (cin>>a>> b) { int num_a= 0 ,num_b= 0 ; for ( int i= 0 ;i<a.size();i++ ) num_a =num_a* 10 +a[i]- ' 0 ' ; for ( int i= 0 ;i<b.size();i++ ) num_b =num_b* 10 +b[i]- ' 0 ' ; if (num_a< 1 ||num_a> 70000 ||num_b< 1 ||num_b> 70000 )

C++ STL 之 list

浪子不回头ぞ 提交于 2020-11-21 11:48:45
#include <list> #include <iostream> using namespace std; // 打印list元素 void PrintList(list< int >& L) { for (list< int >::iterator it = L.begin(); it != L.end(); it++ ) { cout << *it << " " ; } cout << endl; } // 初始化 // list<T> lstT; // list 采用采用模板类实现,对象的默认构造形式: // list(beg, end); // 构造函数将[beg, end)区间中的元素拷贝给本身。 // list(n, elem); // 构造函数将 n 个 elem 拷贝给本身。 // list(const list &lst); // 拷贝构造函数。 void test01() { list < int > mlist1; list < int > mlist2( 10 , 10 ); list < int > mlist3(mlist2); list < int > mlist4(mlist2.begin(), mlist2.end()); PrintList(mlist2); PrintList(mlist3); PrintList(mlist4);

通过 GCC 学习 OpenMP 框架

本秂侑毒 提交于 2020-11-19 05:20:43
OpenMP 框架是使用 C、C++ 和 Fortran 进行并发编程的一种强大方法。GNU Compiler Collection (GCC) V4.4.7 支持 OpenMP 3.0 标准,而 GCC 4.9.3 支持 OpenMP 4 标准。包括 VS 在内的其他编译器也支持 OpenMP。你可以学习使用 OpenMP 编译指示 (pragma),寻找对 OpenMP 提供的一些应用程序编程接口 (API) 的支持,并使用一些并行算法对 OpenMP 进行测试。本文将使用 GCC 5.4.0 作为首选编译器。 第一个 OpenMP 程序 入门:OpenMP 的一大特点就是您只需完成标准的 GCC 安装即可。支持 OpenMP 的程序必须使用 -fopenmp 选项进行编译。(也可以参考 在VS中使用OpenMP ) 让我们先从一个 Hello, World! 打印应用程序开始,它包括一个额外的编译指示. 清单1:使用了 OpenMP 的 Hello World 程序 1 #include <iostream> 2 #include<omp.h> 3 int main() 4 { 5 #pragma omp parallel 6 { 7 std::cout << " Hello World!\n " ; 8 } 9 } 在使用 g++ 编译和运行清单 1 中的代码时

STL——容器(List)List 的数据元素插入和删除操作

无人久伴 提交于 2020-10-23 21:30:17
push_back(elem); //在容器尾部加入一个元素 1 #include <iostream> 2 #include <list> 3 4 using namespace std; 5 6 int main() 7 { 8 int num[] = { 111 , 222 , 333 }; 9 list< int > listInt(num, num + size(num)); 10 cout << " 初始遍历 listInt: " ; 11 for (list< int >::iterator it = listInt.begin(); it != listInt.end(); it++ ) 12 { 13 cout << *it << " " ; 14 } 15 cout << endl; 16 17 listInt.push_back( 444 ); 18 cout << " push_back后遍历 listInt: " ; 19 for (list< int >::iterator it = listInt.begin(); it != listInt.end(); it++ ) 20 { 21 cout << *it << " " ; 22 } 23 cout << endl; 24 25 return 0 ; 26 } 打印结果: pop_back(); /

STL——容器(List)List 的数据元素插入和删除操作

不打扰是莪最后的温柔 提交于 2020-10-02 10:40:54
push_back(elem); //在容器尾部加入一个元素 1 #include <iostream> 2 #include <list> 3 4 using namespace std; 5 6 int main() 7 { 8 int num[] = { 111 , 222 , 333 }; 9 list< int > listInt(num, num + size(num)); 10 cout << " 初始遍历 listInt: " ; 11 for (list< int >::iterator it = listInt.begin(); it != listInt.end(); it++ ) 12 { 13 cout << *it << " " ; 14 } 15 cout << endl; 16 17 listInt.push_back( 444 ); 18 cout << " push_back后遍历 listInt: " ; 19 for (list< int >::iterator it = listInt.begin(); it != listInt.end(); it++ ) 20 { 21 cout << *it << " " ; 22 } 23 cout << endl; 24 25 return 0 ; 26 } 打印结果: pop_back(); /

STL——容器(List)List 的数据元素插入和删除操作

房东的猫 提交于 2020-08-18 05:34:14
push_back(elem); //在容器尾部加入一个元素 1 #include <iostream> 2 #include <list> 3 4 using namespace std; 5 6 int main() 7 { 8 int num[] = { 111 , 222 , 333 }; 9 list< int > listInt(num, num + size(num)); 10 cout << " 初始遍历 listInt: " ; 11 for (list< int >::iterator it = listInt.begin(); it != listInt.end(); it++ ) 12 { 13 cout << *it << " " ; 14 } 15 cout << endl; 16 17 listInt.push_back( 444 ); 18 cout << " push_back后遍历 listInt: " ; 19 for (list< int >::iterator it = listInt.begin(); it != listInt.end(); it++ ) 20 { 21 cout << *it << " " ; 22 } 23 cout << endl; 24 25 return 0 ; 26 } 打印结果: pop_back(); /

[Noip2012] 开车旅行

和自甴很熟 提交于 2020-08-14 06:08:45
Description 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为Hi,城市 i 和城市 j 之间的距离 d[i,j]恰好是这两个城市海拔高度之差的绝对值,即d[i,j] = |Hi− Hj|。 旅行过程中,小 A 和小 B 轮流开车,第一天小 A 开车,之后每天轮换一次。他们计划选择一个城市 S 作为起点,一直向东行驶,并且最多行驶 X 公里就结束旅行。小 A 和小 B的驾驶风格不同,小 B 总是沿着前进方向选择一个最近的城市作为目的地,而小 A 总是沿着前进方向选择第二近的城市作为目的地(注意:本题中如果当前城市到两个城市的距离相同,则认为离海拔低的那个城市更近)。如果其中任何一人无法按照自己的原则选择目的城市,或者到达目的地会使行驶的总距离超出 X 公里,他们就会结束旅行。 在启程之前,小 A 想知道两个问题: 对于一个给定的 X=X0,从哪一个城市出发,小 A 开车行驶的路程总数与小 B 行驶的路程总数的比值最小(如果小 B 的行驶路程为 0,此时的比值可视为无穷大,且两个无穷大视为相等)。如果从多个城市出发,小 A 开车行驶的路程总数与小 B 行驶的路程总数的比值都最小,则输出海拔最高的那个城市。 对任意给定的 X=Xi和出发城市 Si,小