begin

HDUOJ 4990 Reading comprehension

二次信任 提交于 2020-02-28 00:17:45
HDUOJ 4990 Reading comprehension Problem Description Read the program below carefully then answer the question. # pragma comment(linker, "/STACK:1024000000,1024000000") # include <cstdio> # include <iostream> # include <cstring> # include <cmath> # include <algorithm> # include <vector> const int MAX = 100000 * 2 ; const int INF = 1e9 ; int main ( ) { int n , m , ans , i ; while ( scanf ( "%d%d" , & n , & m ) != EOF ) { ans = 0 ; for ( i = 1 ; i <= n ; i ++ ) { if ( i & 1 ) ans = ( ans * 2 + 1 ) % m ; else ans = ans * 2 % m ; } printf ( "%d\n" , ans ) ; } return 0 ; } Input Multi test cases

lower_bound( )和upper_bound( )

泄露秘密 提交于 2020-02-27 13:33:14
lower_bound( )和upper_bound( )适用于 有序序列 ,因为内部是用的二分查找,所以必须得是有序的。 它第一个参数与第二个参数是与sort一样的,也是用来确定区间范围的(闭区间) 参数: first 寻址要搜索的范围中的第一个元素的位置的向前迭代器。 last 寻址要搜索的范围中最后一个元素的下一位置的向前迭代器。 value 在排序范围中搜索的处于第一个位置或可能处于第一个位置的值。 cmp 用户定义的谓词函数对象定义一个元素小于另一个。二进制谓词采用两个参数,并且在满足时返回 true,在未满足时返回 false。 返回值: 向前迭代器在有序的范围内(具有大于或等于指定值的值)的第一个元素的位置,其中等效性由二进制谓词指定。 在升序的数组中 lower_bound( begin,end,num):二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。 upper_bound( begin,end,num):二分查找第一个大于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。 在降序的数组中,我们使用第四个参数greater,重载lower_bound()和upper_bound() lower

leetcode(38)--字符串转换整数

送分小仙女□ 提交于 2020-02-27 12:54:52
题目: 请你来实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。 该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。 注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。 在任何情况下,若函数不能进行有效的转换时,请返回 0。 说明: 假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。 示例 1: 输入: "42" 输出: 42 解答:先过滤空格,再判断正负号,最后加和计数.但是感觉有点麻烦,欢迎有好方法的同学提供意见 class Solution { public: int myAtoi(string str) { auto begin =str.begin(); int res=0; int signal=1; for(;begin!=str

面试题 21:调整数组顺序使奇数位于偶数前面

六眼飞鱼酱① 提交于 2020-02-27 12:36:57
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 思路 定义两个指针。 第一个指针 begin 指向数组的第一个数字 开始遍历数组 只要 begin 指向的数字是奇数,则向后一位,依次判断 当 begin 指向的数字是偶数,则让第二个指针 end 指向 begin + 1 的位置。 然后开始判断 end 所指向的数字是不是偶数,如果是继续往后判断,直至遇到奇数为止。 当 end 指向的是奇数的时候,先将 arr[end] 的数字保存,再将 [begin, end - 1] 的数字都往后整体移动一位。 移动完毕后,将 arr[end] 的数字赋值给 arr[begin],然后 begin 加 1。 只要 end 超出数组的索引范围,则继续判断剩余部分数字的奇偶。 代码 public class Solution { public void reOrderArray(int [] array) { if (array == null || array.length == 0) { return; } int begin = 0; int end = 0; while (end < array.length) { // 判断是否是奇数 while (begin

C++:OOP+STL

六眼飞鱼酱① 提交于 2020-02-27 10:55:34
开学第一天!印象笔记用的太不顺手,还是把笔记搬到这里吧~ OOP 面向对象<–>面向过程 IDE:集成开发环境(需熟悉1-2种) STL:标准模版库 命名空间 namespace: 一个标识符的可见范围(命名空间操作符::) 有效解决名字冲突的问题 void assert ( int expression ) ; assert函数:计算expression,若出错则输出错误信息,调用abort终止程序运行 mini.cpp程序分析 // a mini c++ program # include <iostream> int main ( ) { std :: cout << "Hello, world!" << std :: endl ; return 0 ; // 返回0表示运行成功 } 头文件后缀为.h/.hpp或无后缀(标准头文件) main函数不写return会默认返回0,代表运行成功 流输出符<< 二元 操作符,左结合, 返回值std::cout cout << "Hello World" ; //左操作数cout(类似文件),右操作数字符串,将右输出到左 //返回值 std::cout cout << "Hello World" << endl ; //第一次返回cout,右操作数endl,将右输出到左 string 字符串的连接可以直接用+ string spaces

不相交集合森林的启发式策略

左心房为你撑大大i 提交于 2020-02-26 19:22:32
在文章《 Union-Find 操作检测无向图有无环算法 》中介绍了 Union-Find 算法的一个简单实现,使用一维数组来处理 不相交集合数据结构(Disjoint-set data structure) 。 Union-Find 算法 为该数据结构提供了两种非常有用的操作: Find:判断子集中是否存在特定的元素。可以用于检测是否两个元素存在于相同的子集中。 Union:将两个不子集合并成新的子集合。 1 private int Find(int[] parent, int i) 2 { 3 if (parent[i] == -1) 4 return i; 5 return Find(parent, parent[i]); 6 } 7 8 private void Union(int[] parent, int x, int y) 9 { 10 int xset = Find(parent, x); 11 int yset = Find(parent, y); 12 parent[xset] = yset; 13 } 上述算法的实现的运行时间是 O(n) 。 另一种实现方式是使用有根树来表示集合,树中的每个节点都包含集合的一个成员,每棵树表示一个集合,形成 不相交集合森林(Disjoint-set forest) 。每棵树的根包含了集合的代表,并且是它自己的父节点。 如上图中

二分查找--34. 在排序数组中查找元素的第一个和最后一个位置

不羁岁月 提交于 2020-02-26 13:19:51
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4] 代码实现 class Solution { public: int left_index(vector<int>& nums,int target) { int begin = 0; int end = nums.size() - 1; while(begin <= end) { int mid = (begin + end) / 2; if(nums[mid] == target) { if(mid == 0 || nums[mid - 1] < target) { return mid; } end = mid - 1; } else if(target < nums[mid]) { end = mid - 1; } else if(target > nums[mid]) { begin = mid + 1; } } return -1; } int right_index(vector<int>& nums,int target) { int begin

MySQL-流程控制结构

北战南征 提交于 2020-02-26 11:57:48
流程控制结构 顺序结构 :程序从上往下依次执行 分支结构 :程序从两条或多条路径中选择一条去执行 循环结构 :程序在满足一定条件的基础桑,重复执行一段代码 分支结构 1、if函数 功能:实现简单的双分支 语法: if(表达式1,表达式2,表达式3) 执行顺序: 如果表达式1成立,则if函数就返回表达式2的值,否则返回表达式3的值 应用场景:任何地方 2、case结构 1 情况一、类似于Java中的switch语句,一般用于实现等值判断 2 语法: 3 case 变量|表达式|字段 4 when 要判断的值1 then 返回的值1或语句1; 5 when 要判断的值2 then 返回的值2或语句2; 6 ... 7 else 要返回的值n或语句n; 8 END case; 9 情况二、类似于Java中的多重if语句,一般用于实现区间的判断 10 语法: 11 case 12 when 要判断的条件1 then 返回值1或语句1; 13 when 要判断的条件2 then 返回值2或语句2; 14 ... 15 else 要返回的值n或语句n; 16 end case; 17 18 特点: 19 (1) 20 可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,begin end中或begin end的外边 21 可以作为独立的语句去使用,只能放在begin end中 22 (2)

L2-005 集合相似度 (25分)

让人想犯罪 __ 提交于 2020-02-25 22:37:43
#include <stdio.h> #include <set> #include <algorithm> #include <iostream> using namespace std; const int si=51; set<int> st[si]; int main() { int N,K,M; cin>>N; for(int i=1;i<=N;i++) { cin>>M; int x; for(int j=0;j<M;j++) { cin>>x; st[i].insert(x); } } cin>>K; for(int i=0;i<K;i++) { set <int> U,I; int a,b; cin>>a>>b; set_union(st[a].begin(),st[a].end(),st[b].begin(),st[b].end(),inserter(U,U.begin())); set_intersection(st[a].begin(),st[a].end(),st[b].begin(),st[b].end(),inserter(I,I.begin())); printf("%.2f%%\n",I.size()*100.0/U.size()); } } 来源: https://www.cnblogs.com/Andre/p/12364118.html

GCD串行,GCD并行,GCD同步与异步,

随声附和 提交于 2020-02-25 03:34:44
1. GCD 简介   什么是 GCD 呢???   哈哈,啰嗦一下,想直接看代码的可以直接看第4条   答曰:Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法。 它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。它是一个在线程池模式的基础上执行的并发任务。 在 Mac OS X 10.6 雪豹中首次推出,也可在 iOS 4 及以上版本使用。   GCD是一个替代诸如NSThread等技术的很高效和强大的技术。GCD完全可以处理诸如数据锁定和资源泄漏等复杂的异步编程问题。 GCD的工作原理是让一个程序,根据可用的处理资源,安排他们在任何可用的处理器核心上平行排队执行特定的任务。这个任务可以是 一个功能或者一个程序段。 ↑ 来自百科( 我是百科链接 ) 好吧,但他有什么用呢? GCD 会自动管理线程的生命周期(创建线程、调度任务、销毁线程) 程序员只需要告诉 GCD 想要执行什么任务,不需要编写任何线程管理代码 GCD 可用于多核的并行运算 等    2. GCD 任务和队列 GCD两个核心的概念:任务和队列 任务:    就是执行操作的意思,就是你在线程中执行的那段代码,在 GCD 中是放在 block 中的。   执行任务有两种方式:同步执行(sync)和异步执行(async)。   两者的主要区别是