ACM_基础知识
yiqzq
人生如此复杂,机会多得像稠密图,我们没理由认输。尽管我们走不了最短路,但图仍是连通图,TLE之前,没有一个节点叫失败。
展开
-
子集枚举的二进制(位运算)方法
#include <bits/stdc++.h>int a[5] = {1, 3, 5, 6, 8};void print_subset(int n, int s) { for(int i = 0; i < n; i++) { if(s & (1 << i)) printf("%d ", a[i]); } printf("\n");}int main原创 2018-05-08 18:25:51 · 1693 阅读 · 0 评论 -
大整数加法
方法一:#include #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#define eps 1e-8#define pi 3.1415typedef long long ll;using namespac原创 2018-01-12 22:44:29 · 4958 阅读 · 0 评论 -
堆排序
#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>#include <math.h>#include <ctype.h>#include <map>#include <set>#include <vector>#include <queue>#define inf 0x3f3f3原创 2017-12-27 14:49:31 · 176 阅读 · 0 评论 -
用scanf读地图模板
#include <bits/stdc++.h>using namespace std;int main(){ int n; scanf("%d",&n); char a[100][100]; for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { s原创 2017-12-18 00:12:08 · 233 阅读 · 0 评论 -
求a/b的小数点后某个具体的数值(Position in Fraction)
原题地址http://codeforces.com/contest/900/problem/B 题意:给出三个数a,b,c,求在a/b这个小数的小数点后首次出现数字c的位置,如果没有,输出-1由于计算机本身精度的问题,无论你用什么样的数据类型,都无法存储过长的数据精度,就算是double,也只有15~16位的精度,因此肯定是不满足这道题的要求的。然后第一次写的时候是这么写的 fo原创 2017-12-14 22:11:29 · 1122 阅读 · 0 评论 -
关于类似与俄罗斯娃娃的题的一些思考
灵感来源http://codeforces.com/contest/903/problem/C C. Boxes Packing time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard output Mishka has got n empty bo原创 2017-12-14 16:00:44 · 306 阅读 · 0 评论 -
bitset用法总结
定义一个bitset类型的变量 bitset&lt;8&gt;bs;//定义一个名称为bs,且有8位,初始为0的bitset赋值bs[0]=1;//把第0位设置为1bs[3]=true;//把第3位设置为1,因为true可以转换为1初始并赋值 string初始化bitsetstring strval("1100");bitset&lt;32&gt; bs(st...原创 2018-07-21 00:19:06 · 2556 阅读 · 0 评论 -
HDU 6040 Hints of sd0061 (nth_element()函数介绍)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=6040 一、函数参数nth_element(first, nth, last, compare)nth_element(array, array+6, array+len); //排序了array[6]这个位置,其实是第7小求[first, last]这个区间中第n大小的元素,如果参数加入...原创 2018-08-05 12:20:50 · 242 阅读 · 0 评论 -
递归基础之汉诺塔问题
原题地址:http://poj.org/problem?id=1958思路:一.n盘3塔问题 因为求解是由递归得到的,所以我们很容易就可以得出递推式:d[n]=2∗d[n−1]+1d[n]=2∗d[n−1]+1d[n]=2*d[n-1]+1,其中d[1]=1d[1]=1d[1]=1,那么经过总结,其实就是d[n]=2n−1d[n]=2n−1d[n]=2^n-1二.n盘4塔问题 这个...原创 2018-09-09 21:00:51 · 487 阅读 · 0 评论 -
矩阵旋转的两种方法
方法一:需要开辟额外的空间void rot(){ int i,j,c[40][40]; for(i = 1; i <= n; ++i){ for(j = 1; j <= n; ++j){ c[j][n-i+1] = b[i][j]; } } for(i = 1; i <= n; ++i)...原创 2018-10-10 11:11:15 · 3853 阅读 · 0 评论 -
大整数减法
#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>#include <math.h>#include <ctype.h>#include <map>#include <set>#include <vector>#include <queue>#define inf 0x3f3f3原创 2018-01-13 16:02:48 · 393 阅读 · 0 评论 -
2的阶乘(高精度)
方法一:完全模拟竖式计算,没计算一位就处理相应的结果 方法二:先将每一位都乘以2,进行计算,等全都乘完以后在进行相应的处理 方法一的代码 :#include #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f#原创 2018-01-21 12:32:00 · 5031 阅读 · 0 评论 -
codeforces Round #371 (Div 2)B.Filya and Homework(unique函数的运用)
原题地址:http://codeforces.com/contest/714/problem/B 思路:水题,方法有很多,但最快的方法应该是直接利用unique函数(也可以用set),然后找题目中的规律,然后求解 在题目中有一点要注意的是,可以对至多一个数一个数进行加x操作,也可以对至多一个数一个数进行减x操作,言外之意就是,也可以对数字不进行操作#include #include #原创 2018-01-21 12:39:12 · 160 阅读 · 0 评论 -
记异或的妙处(异或1)
发现了一个异或1的妙处 我们可以直观的发现,如果是一个偶数^1,那么答案是偶数+1.如果是一个奇数^1,那么答案是奇数-1原创 2018-05-05 15:46:51 · 14743 阅读 · 6 评论 -
归并排序应用之求逆序对 poj 1804
思路:用归并排序求逆序对其实只是在排序过程中的副作用。具体下面代码自己理解吧。有疑问欢迎评论提出。#include <cstdio>#include <cstring>#include <vector>using namespace std;const int maxn = 10005;int n;int a[maxn];int sum =...原创 2018-04-18 21:43:16 · 204 阅读 · 0 评论 -
归并排序模板
#include<bits/stdc++.h>using namespace std;const int maxn = 10005;int n;int a[maxn];void Merge(int L, int R, int mid) { vector<int>v;//创建额外空间 int p1 = L; int p2 = mid + 1; while(p1原创 2018-04-18 17:58:13 · 100 阅读 · 0 评论 -
离散化的方法
总结有如下几个步骤: 1.拷贝原数组 2.将拷贝的数组排序 3.利用unique()对拷贝数组去重,并记录不重复元素 4.利用lower_bound()离散化注:唯一需要注意的是下标究竟从几开始#include <bits/stdc++.h>using namespace std;const int maxn = 10005;int a[maxn], t[maxn];int n;i原创 2018-04-18 16:55:52 · 1565 阅读 · 0 评论 -
STL的查找函数
对于upper_bound来说,返回的是被查序列中第一个大于查找值的指针,也就是返回指向被查值>查找值的最小指针,lower_bound则是返回的是被查序列中第一个大于等于查找值的指针,也就是返回指向被查值>=查找值的最小指针。 ————————————————————————————————————————————— 2018年4月24日更新首先,选择查找算法时...转载 2018-04-18 16:03:06 · 775 阅读 · 0 评论 -
poj3684(弹性碰撞模型)
题意:将N个半径为R的球放入一个圆桶(圆桶口径刚好放入一个球), 将圆桶竖直放着 ,最下端距离地面H高度,让球每隔一秒自由下落,求T时刻各个球距离地面的高度 这题被挑战上面的描述给坑了,挑战上的描述好像有问题,原话是:从下向上数第i个球的底端距离地面高度的H+2R。但实际题面意思应该是距离地面H+2R*(i-1)。在管道中的球是依次叠起来的。 题解:这题目不难,比较重要的是题目蕴含的思想,两个原创 2018-04-09 20:15:24 · 782 阅读 · 0 评论 -
poj3279
#include <algorithm>#include <cstring>#include <cstdio>using namespace std;const int dx[5]= {-1,0,0,0,1};const int dy[5]= {0,-1,0,1,0};int M,N;const int MAX_M=16;const int MAX_N=16;int tile[MAX原创 2018-04-08 20:57:30 · 169 阅读 · 0 评论 -
poj3276Face The Right Way(反转开关问题)
原题地址:http://poj.org/problem?id=3276 题意:n头牛,每头牛要么面朝前方或者面朝后方。现在可以连续驱使连续的k头牛反转。求使得所有的牛面朝前方的最小操作数和对应的k是多少? (PS:这题区间的两端值需要仔细思考,尤其需要注意从0到i-1计数和从1到i计数是不一样) 题解:挑战上的开关问题,给了两种方法,一种是复杂度为O(n^3)的,这种就不多讲了。终点介绍一下优...原创 2018-04-07 21:15:56 · 229 阅读 · 0 评论 -
Codeforces Round #471 (Div. 2)A. Feed the cat(关于取模的一个细节)
http://codeforces.com/contest/955/problem/A 题目很简单:给定Andrew醒来时间,醒来时候猫的饥饿度,猫每分钟增长饥饿度,一份猫食价格,一份猫食能消除的饥饿度;现在有两种方案,一种是醒来直接买猫食,一种是到20:00后买猫食可以打八折,输出最省钱方案花费的钱数。有个很关键的的地方,可以 用(h+n-1)%n的方法处理,省略了判断的过程。 或者也可以采原创 2018-04-02 21:03:54 · 265 阅读 · 0 评论 -
HDU6514 Monitor(二维差分+二维前缀和)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=6514题意:给出q个矩形覆盖的区域,再给出若干个查询,判断每次查询的矩形是否已经被完全覆盖.思路:二维差分处理一下,然后求二维前缀和,之后O(1)处理查询即可.#include <bits/stdc++.h>#define eps 1e-8#define INF 0x3f3f3f3...原创 2019-04-20 19:58:42 · 742 阅读 · 0 评论