beg

计数排序的C++代码实现

陌路散爱 提交于 2020-02-15 11:11:23
计数排序,并非基数排序。暂时只支持数值型 编译环境:C++11 代码实现如下: #include <cstring> // std::memset #include <type_traits> // std::declval /* 计数排序 * [@beg, @end) 待排序的范围,同时保存结果,须支持前向迭代 * [@min, @max) 待排序范围的最小值和最大值,不包含最大值 */ template<typename _ForwardIter> void csort(_ForwardIter beg, _ForwardIter end, typename std::remove_reference<decltype(*std::declval<_ForwardIter>())>::type min, typename std::remove_reference<decltype(*std::declval<_ForwardIter>())>::type max) { using __element_type = typename std::remove_reference<decltype(*std::declval<_ForwardIter>())>::type; static_assert(std::is_arithmetic<__element_type>:

洛谷P1280 尼克的任务

谁说胖子不能爱 提交于 2020-02-06 17:08:47
题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成。 尼克的一个工作日为N分钟,从第一分钟开始到第N分钟结束。当尼克到达单位后他就开始干活。如果在同一时刻有多个任务需要完成,尼克可以任选其中的一个来做,而其余的则由他的同事完成,反之如果只有一个任务,则该任务必需由尼克去完成,假如某些任务开始时刻尼克正在工作,则这些任务也由尼克的同事完成。如果某任务于第P分钟开始,持续时间为T分钟,则该任务将在第P+T-1分钟结束。 写一个程序计算尼克应该如何选取任务,才能获得最大的空暇时间。 输入格式 输入数据第一行含两个用空格隔开的整数N和K(1≤N≤10000,1≤K≤10000),N表示尼克的工作时间,单位为分钟,K表示任务总数。 接下来共有K行,每一行有两个用空格隔开的整数P和T,表示该任务从第P分钟开始,持续时间为T分钟,其中1≤P≤N,1≤P+T-1≤N。 输出格式 输出文件仅一行,包含一个整数,表示尼克可能获得的最大空暇时间。 输入输出样例 输入 #1 15 6 1 2 1 6 4 11 8 5 8 1 11 5 输出 #1 4题解给的思路是从后往前倒着想,很妙。 #include <bits/stdc++.h> using namespace std; int n,k;

[剑指offer] 27. 字符串的排列

会有一股神秘感。 提交于 2020-02-01 05:24:34
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 题目就是考察排列的算法,利用递归+回溯解决 注意去重 class Solution { public: vector<string> res; vector<string> Permutation(string str) { if(str=="") return res; helper(str, 0, str.length() - 1); sort(res.begin(),res.end()); return res; } void helper(string &str, int beg, int end) { set<char> hasSwap; if (beg >= end) res.push_back(str); else for (int i = beg; i <= end; i++) { if (hasSwap.find(str[i]) == hasSwap.end()) { hasSwap.insert(str[i]); swap(str[i], str[beg]); helper(str, beg +

STL之deque

孤街醉人 提交于 2020-01-12 07:12:16
deque 和 vector 一样都是标准模板库中的内容, deque 是双端队列,在接口上和 vector 非常相似,在许多操作的地方可以直接替换。假如读者已经能够有效地使用vector 容器,下面提供 deque 的成员函数和操作,进行对比参考。 Deque 成员函数 函数 描述 c.assign(beg,end) c.assign(n,elem) 将 [beg; end) 区间中的数据赋值给 c 。 将 n 个 elem 的拷贝赋值给 c 。 c.at(idx) 传回索引 idx 所指的数据,如果 idx 越界,抛出out_of_range 。 c.back() 传回最后一个数据,不检查这个数据是否存在。 c.begin() 传回迭代器重的可一个数据。 c.clear() 移除容器中所有数据。 deque c deque c1(c2) Deque c(n) Deque c(n, elem) Deque c(beg,end) c.~deque() 创建一个空的 deque 。 复制一个 deque 。 创建一个 deque ,含有 n 个数据,数据均已缺省构造产生 。 创建一个含有 n 个 elem 拷贝的 deque 。 创建一个以 [beg;end) 区间的 deque 。 销毁所有数据,释放内存。 c.empty() 判断容器是否为空。 c.end()

Codeforces - 1191F - Tokitsukaze and Strange Rectangle - 组合数学 - 扫描线

纵饮孤独 提交于 2020-01-12 04:42:56
https://codeforces.com/contest/1191/problem/F 看了一下题解的思路,感觉除了最后一段以外没什么启发。 首先离散化x加快速度,免得搞多一个log。其实y不需要离散化。 规定无穷大就是xn+1这个很好理解嘿嘿。(反正开多了5个不怕) 注意到其实从上往下一行一行扫过去,每次必须新增的元素才是新的集合,那很容易想到一个不重不漏的办法就是每次计算“以点p[i]为加进去的新点中的结束的集合”,那么假设一开始p[i]的左侧有cntl个点,那么显然有(cntl+1)条线在p[i]的左侧,而p[i]的右侧有cntr个点,也是(cntr+1)条线。 这个cntl显然就是query(1,p[i].x-1),而右侧则是query(p[i].x+1,p[i+1].x-1),因为不能包含同y的下一个点p[i+1],而其中,上面的点选法也会产生区别。 那么每层加入一个正无穷也就是xn+1就可以了。 溢出这种现在我不会错的了。 #include<bits/stdc++.h> using namespace std; typedef long long ll; int n; struct Point { int x, y; bool operator<(const Point &p)const { return y == p.y ? x<p.x: y>p.y; /

Deque的部分成员函数 解析,关于这个类,百度有很多解析,唯独没有其函数介绍

你说的曾经没有我的故事 提交于 2020-01-10 19:06:42
函数 描述 c.assign(beg,end) c.assign(n,elem) 将[beg; end)区间中的数据赋值给c。 将n个elem的拷贝赋值给c。 c.at(idx) 传回索引idx所指的数据,如果idx越界,抛出out_of_range。 c.back() 传回最后一个数据,不检查这个数据是否存在。 c.begin() 传回迭代器重的可一个数据。 c.clear() 移除容器中所有数据。 deque<Elem> c deque<Elem> c1(c2) Deque<Elem> c(n) Deque<Elem> c(n, elem) Deque<Elem> c(beg,end) c.~deque<Elem>() 创建一个空的deque。 复制一个deque。 创建一个deque,含有n个数据,数据均已缺省构造产生。 创建一个含有n个elem拷贝的deque。 创建一个以[beg;end)区间的deque。 销毁所有数据,释放内存。 c.empty() 判断容器是否为空。 c.end() 指向迭代器中的最后一个数据地址。 c.erase(pos) c.erase(beg,end) 删除pos位置的数据,传回下一个数据的位置。 删除[beg,end)区间的数据,传回下一个数据的位置。 c.front() 传回地一个数据。 get_allocator 使用构造函数返回一个拷贝

一个随机摇号的js脚本

旧时模样 提交于 2019-12-09 18:14:31
默认是随机生成1~10内的十个数 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <input type="text" id="have" placeholder="例外,以逗号分隔"> <br> <input type="text" id="beg" placeholder="生成范围开始0-100"> <input type="text" id="end" placeholder="生成范围结束0-100"> <button onclick="start();">开始</button> <div id="content"></div> <script type="text/javascript"> Date.prototype.Format = function (fmt) { // author: meizz var o = { "M+": this.getMonth() + 1, // 月份 "d+": this.getDate(), // 日 "h+": this.getHours(), // 小时 "m+": this.getMinutes(), // 分 "s+": this.getSeconds(), // 秒

PYTHON学习第N天

走远了吗. 提交于 2019-12-02 09:24:11
字符串的常用内置方法 capitalize() 将字符串的第一个字符转换为大写。 lower() 转换字符串中所有大写字符为小写。 upper() 转换字符串中的小写字母为大写。 swapcase() 将字符串中大写转换为小写,小写转换为大写。 count(str, beg= 0,end=len(string)) 返回str在 string 里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数。 str2 = "DAXIExiaoxie" print ( str2 . count ( 'xi' ) ) # 2 endswith(suffix, beg=0, end=len(string)) 检查字符串是否以指定子字符串 suffix 结束,如果是,返回 True,否则返回 False。如果 beg 和 end 指定值,则在指定范围内检查。 startswith(substr, beg=0,end=len(string)) 检查字符串是否以指定子字符串 substr 开头,如果是,返回 True,否则返回 False。如果 beg 和 end 指定值,则在指定范围内检查。 str2 = "DAXIExiaoxie" print ( str2 . endswith ( 'ie' ) ) # True print ( str2 . endswith ( 'xi' )

C++ algorithm算法库

佐手、 提交于 2019-11-28 15:20:04
C++ algorithm算法库 Xun 标准模板库(STL)中定义了很多的常用算法,这些算法主要定义在 <algorithm> 中。编程时,只需要在文件中加入 #include<algorithm> 即可方便地使用这些算法。若要用好这些函数,你必须了解以下几个概念: 容器 容器是用来存放各种数据的一个东西, <algorithm> 中的算法是针对容器设计的。因此,不论数据是一些 int , char 还是自定义的 class , <algorithm> 中的函数都可以正确应对。 vector 是最常用的容器。 迭代器 迭代器是与容器进行配套使用的。它的作用是对容器中的元素进行遍历,比如数组的指针就可以看作一种迭代器。迭代器一般支持解引用( operator*() )、自加( operator++() )、相等( operator==() )等操作。 谓词 谓词是用来对 <algorithm> 中的函数进行定制操作的。谓词可以是lambda表达式或是函数/函数指针,并且 <algorithm> 中只有一元谓词和二元谓词,即函数只能接收一个或两个参数。对于需要额外参数的谓词可以使用lambda表达式的捕获功能。 pair 部分算法会有两个返回值, pair 有两个成员 first 和 second ,用来将两个值进行打包返回。 下面的内容主要来源于《C++ Primer