int函数

算法复习之坐标离散化

无人久伴 提交于 2020-03-27 05:52:22
离散化概念 例子: 1. 描述: 在桌子上放了N个平行于坐标轴的矩形,这N个矩形可能有互相覆盖的部分,求它们组成的图形的面积。 输入格式:输入第一行为一个数N(1<=N<=100),表示矩形的数量,下面N行,每行四个整数,分别表示每个矩形的左下角 和右上角的坐标,坐标范围为-10^8到10^8之间的整数。 输出格式: 输出只有一行,一个整数,表示图形面积。 样例输入: 3 1 1 4 3 2 -1 3 2 4 0 5 2 样例输出: 10 #include<iostream> #include<algorithm> using namespace std; const int maxn=210; int x1[maxn],y1[maxn],x2[maxn],y2[maxn],x[maxn],y[maxn]; void init() { for(int i=0; i<maxn; i++) { x1[i]=y1[i]=x2[i]=y2[i]=x[i]=y[i]=0; } } int main() { int n; while(cin>>n) { init(); for(int i=1; i<=n; i++) { cin>>x1[i]>>y1[i]>>x2[i]>>y2[i]; x[2*i-1]=x1[i]; x[2*i]=x2[i]; y[2*i-1]=y1[i]; y[2*i]=y2

poj1664放苹果(递归)

两盒软妹~` 提交于 2020-03-26 18:33:26
题目链接 : http://poj.org/problem?id=1664 放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 37273 Accepted: 22957 Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。 Input 第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。 Output 对输入的每组数据M和N,用一行输出相应的K。 Sample Input 1 7 3 Sample Output 8解题思路:就是n个球放m个盒子的问题,采用递归的思想,定义函数func(n,m)为n个苹果放入m个盘子,可以分为两种情况:第一种,当m>n, 则总会有m-n个盒子空着,去掉他们对总的放法不产生影响,即 if(m > n) f(n, m) = f(n, n)第二种,当n<=m时,可以分为两种:  1.至少有一个盒子空着,则 f(n, m) = f(n, m-1);  2.所有盒子都有球,我们可以从每个盒子中拿掉一个球而不影响总的放法,则 f(n, m) = f(n-m, m);所以当n<=m时,f(n, m)=f(n, m-1)

lc0326

旧城冷巷雨未停 提交于 2020-03-26 11:17:04
目录 ✅ 1170. 比较字符串最小字母出现频次 描述 解答 c/java 观看 py ✅ 1170. 比较字符串最小字母出现频次 描述 我们来定义一个函数 f(s),其中传入参数 s 是一个非空字符串;该函数的功能是统计 s 中(按字典序比较)最小字母的出现频次。 例如,若 s = "dcce",那么 f(s) = 2,因为最小的字母是 "c",它出现了 2 次。 现在,给你两个字符串数组待查表 queries 和词汇表 words,请你返回一个整数数组 answer 作为答案,其中每个 answer[i] 是满足 f(queries[i]) < f(W) 的词的数目,W 是词汇表 words 中的词。 示例 1: 输入:queries = ["cbd"], words = ["zaaaz"] 输出:[1] 解释:查询 f("cbd") = 1,而 f("zaaaz") = 3 所以 f("cbd") < f("zaaaz")。 示例 2: 输入:queries = ["bbb","cc"], words = ["a","aa","aaa","aaaa"] 输出:[1,2] 解释:第一个查询 f("bbb") < f("aaaa"),第二个查询 f("aaa") 和 f("aaaa") 都 > f("cc")。 提示: 1 <= queries.length <= 2000 1

Potato的暑期训练day#2 ——计算几何模板

99封情书 提交于 2020-03-26 10:23:39
目录 计算几何 二维几何: 点与向量 线 多边形 圆 半平面交 平面直线图(PSGL) 旋转卡壳 三维几何 基础点面 凸包 计算几何 二维几何: 点与向量 const double eps=1e-10; const double PI=acos(-1.0); struct Point{ double x,y; Point(double x=0,double y=0):x(x),y(y){} }; typedef Point Vector; Vector operator -(Point a,Point b){ return Vector(a.x-b.x,a.y-b.y); } Vector operator +(Point a,Point b){ return Vector(a.x+b.x,a.y+b.y); } Vector operator *(Vector a,double p){ return Vector(a.x*p,a.y*p); } Vector operator /(Vector a,double p){ return Vector(a.x/p,a.y/p); } bool operator <(const Point& a,const Point& b){ return a.x<b.x||(a.x==b.x&&a.y<b.y);//在有精度需求,比如使用lower

小沈的C++学习8——引用

随声附和 提交于 2020-03-26 08:46:07
一、引用的概念 我们可以把引用想象成一个数据的别名, 通过 类型+&+引用名=变量名 的 方式定义 当我们对引用名的数据更改时,原变量名对应的数据也会改变。代码如下: int a=1; int &b=a; cout<<b<<endl; a = 2; cout<<b<<endl; b = 1; cout<<a<<endl; View Code 1 可以理解为两个变量在内存中公用的一个数据,我们可以打印引用和原变量的地址: int a=1; int &b=a; cout<<&a<<endl; cout<<&b<<endl; View Code 2 可以发现两个地址是相同的 二、引用的适用范围 引用本质上是另一个变量名,只不过这个声明的变量和原本的变量名共用一个内存地址   以下对象可以被引用: 1.int、float、double、char等类型定义的变量 2.指针变量  int *a;int *&p=a; 3.常量变量  const int&h=3        const int *b;const int *&pb 4.数组 5.引用 (无限套娃)   以下对象不可以被引用: 1.void变量(我也不知道这个引用到底有啥用 2.没有引用的引用,没有引用的指针(禁止套娃) 3.没有空引用,即不能像指针一样指向空值 三、引用的应用 1.做函数的形式参数 比如一个最简单的数据交换函数

hdu 1078 记忆化搜索

北战南征 提交于 2020-03-26 07:16:40
题意:每一位置有特定量食物。耗子从(0,0)开始一次只能向左或右前进不多于k步且下一个位置的食物必须比当前位置多,问耗子所能吃到的食物的最大量。 1、此题目为搜索的题目,寻找能够满足条件的位置。 2、求最大食物量,不同位置有有限个选择(只能去食物更多的地方),分别选择出最优后,搜索过程中可求出(0,0)开始所能吃到的最大量。这里记录的就是从该位置开始吃,所能获得的最大食物量dp[i][j]. 百度百科中记忆化搜索的描述及例题 记忆化搜索:算法上依然是搜索的流程,但是搜索到的一些解用 动态规划 的那种思想和模式作一些保存。 一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态。 更重要的是搜索还可以剪枝,可能剪去大量不必要的状态,因此在空间开销上往往比动态规划要低很多。 记忆化算法在求解的时候还是按着自顶向下的顺序,但是每求解一个状态,就将它的解保存下来, 以后再次遇到这个状态的时候,就不必重新求解了。 这种方法综合了搜索和动态规划两方面的优点,因而还是很有实用价值的。 可以归纳为:记忆化搜索=搜索的形式+动态规划的思想 正文写完了就开始吐一下槽,hdoj服务器有时候也不稳定,同样的代码也可能tle,如果实在找不到问题的时候可以换一个时间提交。嗯~ #include<stdio.h> #include<string.h> int map[105][105],dp[105]

八大排序算法总结

孤街浪徒 提交于 2020-03-26 05:29:24
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。 本文将依次介绍上述八大排序算法。 算法一:插入排序 插入排序示意图 插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 算法步骤 : 1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。 2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。) 代码实现: void insert_sort(int array[],unsignedint n) { int i,j; int temp; for(i = 1;i < n;i++) { temp = array[i]; for(j = i;j > 0&& array[j - 1] > temp;j--) { array[j]= array[j - 1]; } array[j] = temp; } } 算法二:希尔排序 希尔排序示意图 希尔排序 ,也称

关于大数组定义为全局变量和内部变量的一些区别

冷暖自知 提交于 2020-03-25 23:21:51
什么是全局变量和main函数中的变量 在我个人浅显的理解下,我所认为的全局变量就是定义在函数外部,作用于整个代码的变量类型 而定义在函数中的变量就是只作用于该函数内部的变量 这两者除此之外再无区别 当我刷了一段时间的题后~尤其是当我们今天看到dp背包问题的模板题时,我对这两者又有了不一样的认识和感受 情形如下: #include <bits/stdc++.h> using namespace std; int main() { int f[1010][1010], v[1010], w[1010]; int N, V; cin >> N >> V; for(int i = 1;i <= N; i++) cin >> v[i] >> w[i]; for(int i = 1;i <= N; i++) for(int j = 0;j <= V; j++) { f[i][j] = f[i-1][j]; if(j >= w[i]) { f[i][j] = max(f[i][j], f[i-1][j-v[i]]+w[i]); } cout << f[N][V] << endl; return 0; } } 这是一个再简单不过的完全背包的模板题,当这个题在一些在线评测oj中都可以顺利AC !! 但是,当我的这种写法在我本地的IDE(VScode)中运行时

LeetCode All in One 题目讲解汇总(持续更新中...)

情到浓时终转凉″ 提交于 2020-03-25 21:44:22
We are given an array A of positive integers, and two positive integers L and R ( L <= R ). Return the number of (contiguous, non-empty) subarrays such that the value of the maximum array element in that subarray is at least L and at most R . Example : Input: A = [2, 1, 4, 3] L = 2 R = 3 Output: 3 Explanation: There are three subarrays that meet the requirements: [2], [2, 1], [3]. Note: L, R and A[i] will be an integer in the range [0, 10^9] . The length of A will be in the range of [1, 50000] . 这道题给了我们一个数组,又给了我们两个数字L和R,表示一个区间范围,让我们求有多少个这样的子数组,使得其最大值在[L, R]区间的范围内。既然是求子数组的问题,那么最直接

剑指Offer-替换空格

梦想的初衷 提交于 2020-03-25 19:28:02
题目 :请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。 在原来的字符串上替换,并保证输入的字符串后面有足够的空余内存。 思路 : 解法一:最容易想到的就是 当遇到空格时,将后面的字符向后面移动2位 。此方法的时间复杂度为O(N^2)。 解法二:   首先遍历字符串, 统计字符串中的空格数目 ,计算新的字符长度 newLen = oldLen + 2 * 空格数;   依次 从字符串后面开始复制 ,分别用p1,p2指向旧新字符串的末尾,当遇到空格时,依次赋值‘0’,‘2’,‘%’;当p1 == p2时,过程终止(p1,p2之前的都是相同的,不用再复制)。此方法时间复杂度为O(N)。 code : 1 //len 为字符数组str的总容量 2 void ReplaceBlank(char *str, int len) 3 { 4 if (str == NULL || len <= 0) 5 { 6 return ; 7 } 8 //oldLen为字符串str的实际长度 9 int oldLen = 0; 10 int NumberOfBlank = 0; 11 int i = 0; 12 while (str[i] != '\0') 13 { 14 ++oldLen; 15 if (str[i