include

快速幂

让人想犯罪 __ 提交于 2020-03-07 10:19:42
快速幂: 快速幂 顾名思义,就是快速算某个数的多少次幂。其时间复杂度为O(log₂N),与朴素的O(N)相比效率有了极大的提高。 求a的n次方,普通情况是这样的: int ans=1; for(i=1;i<=n;i++) ans*=a; 可以知道时间复杂度为 O(n) 。 而 快速幂 ,举一个例子吧,不多半页或一页的定义,直接给出例子,应该更好理解一点。 比如: 求a的11次方:(快速幂) 11可以写成二进制(1011),即2的11次方==2的1011(二进制表示)次方。 而2的1次方乘以本身等于2的2次方(我们暂时将2的1次方记为一阶) 2的2次方乘以本身等于2的4次方(我们暂时将2的2次方记为二阶) 2的4次方乘以本身等于2的8次方(我们暂时将2的4次方记为三阶) 那么我们可以知道:2的11次方=2的1次方×2的2次方×2的8次方 也就是ans=一阶×二阶×四阶(这个时候对比11的二进制1011) 可以发现刚好从右往左,是第一位,第二位,第四位是1。 快速幂求a的n次方对m取模: # include <stdlib.h> # include <stdio.h> # include <algorithm> # include <iostream> # include <string.h> # include <math.h> using namespace std ; int

1033. 旧键盘打字(20)

╄→尐↘猪︶ㄣ 提交于 2020-03-07 08:33:52
1033. 旧键盘打字(20) 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过105个字符的串。可用的字符包括字母[a-z, A-Z]、数字0-9、以及下划线“_”(代表空格)、“,”、“.”、“-”、“+”(代表上档键)。题目保证第2行输入的文字串非空。 注意:如果上档键坏掉了,那么大写的英文字母无法被打出。 输出格式: 在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。 输入样例: 7+IE. 7_This_is_a_test. 输出样例: _hs_s_a_tst #include <iostream> #include <cstring> #include <algorithm> #include <cstdio> using namespace std; int flag[130]; int main() { memset(flag,0,sizeof(flag)); string input; string real; getline(cin,input); getline(cin,real); for(size_t i=0;i<input

c++11 随机数random

大兔子大兔子 提交于 2020-03-07 08:08:50
c++11提供的<random>实现了随机数库,它通过随机数引擎类(random_number_engines)产生随机数序列,随机数分布类(random-number distribution)使用随机数引擎生成服从特定概率分布的随机数。 让我们看一个简单的例子: #include <iostream> #include <random> using std::cout; using std::endl; using std::default_random_engine; int main() { default_random_engine e; for (size_t i = 0; i < 10; ++i) //生成十个随机数 cout << e() << endl; cout << "Min random:" << e.min() << endl; //输出该随机数引擎序列的范围 cout << "Max random:" << e.max() << endl; return 0; } 生成的随机数结果: 在例子中,随机数类是定义在std命名空间的,所以要声明。随机数引擎是函数对象,这就是为什么使用e()去生成随机数。程序每次运行都会生成相同的随机数序列,这在一定程度有利于程序的调试,但我们有时需要每一次运行产生的随机数序列都是不同的

leecode-面57(和为s的连续正数序列)

只愿长相守 提交于 2020-03-07 02:39:32
移动窗口法的衍生 # include <stdio.h> # include <string.h> # include <stdlib.h> # include <math.h> typedef struct Node_ { int len ; int * next ; } Node ; Node * node ; Node * Initial ( int target ) { int n = sqrt ( 2 * target ) ; Node * node = ( Node * ) calloc ( n , sizeof ( Node ) ) ; return node ; } int * returnColum ( int start , int end ) { //end<start int * arry = ( int * ) calloc ( start - end + 1 , sizeof ( int ) ) ; int i = 0 ; int len = start - end + 1 ; for ( int i = 0 ; i < len ; i ++ ) { arry [ i ] = end ++ ; } for ( int i = 0 ; i < 2 ; i ++ ) return arry ; } Node * getcloum ( int target ,

Linux系统编程之信号量

你说的曾经没有我的故事 提交于 2020-03-07 02:11:53
原理: 1、信号量的概念 信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。 编程时可根据操作信号量值的结果判断是否对公共资源具有访问的权限,当信号量值大于0时,则可以访问,否则将阻塞。 PV原语是对信号量的操作,一次P操作使信号量sem减1,一次V操作使信号量sem加1。 信号量主要用于进程或线程间的同步和互斥这两种典型情况。 (1)若用于互斥,几个进程(或线程)往往只设置一个信号量。 (2)若用于同步操作,往往会设置多个信号量,并且安排不同的初始值,来实现它们之间的执行顺序。 信号量用于互斥 信号量用于同步 例题1 :信号量实现互斥功能,模拟打印机 # include <stdio.h> # include <pthread.h> # include <unistd.h> # include <semaphore.h> sem_t sem ; void printer ( char * str ) { sem_wait ( & sem ) ; while ( * str ) { putchar ( * str ) ; fflush ( stdout ) ; str ++ ; sleep ( 1 ) ; } sem_post ( & sem ) ; } void * thread_fun1 ( void * arg ) {

STM32外部中断函数

岁酱吖の 提交于 2020-03-06 16:35:23
STM32外部中断函数 在外部中端的 exti.h 文件中 # ifndef _EXTI_H # define _EXTI_H # include "stm32f10x.h" void EXTIX_Init ( void ) ; # endif 在外部中端的 exti.c 文件中 # include "exti.h" # include "led.h" # include "key.h" # include "delay.h" # include "usart.h" # include "beep.h" //外部中断 0 服务程序 void EXTIX_Init ( void ) { EXTI_InitTypeDef EXTI_InitStructure ; NVIC_InitTypeDef NVIC_InitStructure ; KEY_Init ( ) ; //①按键端口初始化 RCC_APB2PeriphClockCmd ( RCC_APB2Periph_AFIO , ENABLE ) ; //②使能 AFIO 时钟 //GPIOE.3 中断线以及中断初始化配置,下降沿触发 GPIO_EXTILineConfig ( GPIO_PortSourceGPIOE , GPIO_PinSource3 ) ; //③ EXTI_InitStructure . EXTI_Line =

OpenCV 金字塔图像缩放

守給你的承諾、 提交于 2020-03-06 11:46:04
// image_pyramid.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <string> #include <iostream> using namespace std; #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <math.h> #include <stdlib.h> #include <stdio.h> #pragma comment(lib,"opencv_core2410d.lib") #pragma comment(lib,"opencv_highgui2410d.lib") #pragma comment(lib,"opencv_imgproc2410d.lib") using namespace cv; /// 全局变量 Mat src, dst, tmp; char* window_name = "Pyramids Demo"; /** * @函数 main */ int main( int argc, char** argv ) { /// 指示说明 printf( "\n Zoom In-Out demo \n " ); printf( "-------------

【练习5.11】图像分割、cvPyrSegmentagtion、图像金字塔

自闭症网瘾萝莉.ら 提交于 2020-03-06 11:45:32
提纲 题目要求 程序代码 结果图片 要言妙道 题目要求: 载入一张风景图,执行cvPyrSegmentation操作 a、threshold1=threshold2=200 b、threshold1=200,threshold2=50 c、threshold1=200,threshold2=100 程序代码: 1 // OpenCVExerciseTesting.cpp : 定义控制台应用程序的入口点。 2 // 3 //D:\\Work\\Work_Programming\\Source\\Image\\lena.jpg 4 5 6 #include "stdafx.h" 7 #include <cv.h> 8 #include <highgui.h> 9 #include <iostream> 10 11 #include <opencv2/legacy/legacy.hpp> 12 //#pragma comment(lib, "opencv_legacy2411.lib") 13 14 using namespace cv; 15 using namespace std; 16 17 //函数声明-->--->-->--->-->--->-->--->// 18 19 bool IsCanBeUsedForImagePyramid(IplImage * img,

linux安装vmware出现kernel-header问题

和自甴很熟 提交于 2020-03-06 10:42:05
查看日志文件, cat /tmp/vmware-xiuyuan/vmware-modconfig-9996.log | more 在日志文件中有这么几行: Setting header path for 3.7.2-204.fc18.x86_64 to "/lib/modules/3.7.2-204.fc18.x86_64/build/include". Validating path "/lib/modules/3.7.2-204.fc18.x86_64/build/include" for kernel release "3.7.2-204.fc18.x86_64". Failed to find /lib/modules/3.7.2-204.fc18.x86_64/build/include/linux/version.h Failed version test: /lib/modules/3.7.2-204.fc18.x86_64/build/include/linux/version.h not found. 从中不难看出,是因为缺少version.h文件。 所以只需要 拷贝/usr/include/linux/version.h到/lib/modules/3.7.2-204.fc18.x86_64/build/include/linux/目录 sudo cp /usr

HDU 1227(Fast Food)

牧云@^-^@ 提交于 2020-03-06 10:15:34
动态规划题,状态转移方程为 dp[i][j] = min(dp[i-1][k] + cost[k+1][j]),其中 dp[i][j] 表示前 j 个餐厅建 i 个仓库的最短距离和,cost[i][j] 表示在第 i 个餐厅到第 j 个餐厅之间建一个仓库的最短距离和,可知该仓库建立在下标为 (i+j)/2 的餐厅处。 #include <iostream> #include <cstring> #include <cmath> #include <algorithm> using namespace std; const int INF = 0x3f3f3f3f; const int MAXN = 205; int pos[MAXN]; //餐厅的位置 int dp[35][MAXN]; //动态规划数组 int cost[MAXN][MAXN]; //建立一个仓库的最小总距离 int main() { int n, m; //餐厅数,仓库数 int test = 1; //测试用例数 while (cin >> n >> m) { if (n == 0 && m == 0) break; for (int i = 1; i <= n; i++) { cin >> pos[i]; } memset(cost, 0, sizeof(cost)); memset(dp, 0,