sizeof

CreateDIBSection

冷暖自知 提交于 2020-04-04 04:20:06
分辨率 我们常说的屏幕分辨率为640×480,刷新频率为70Hz,意思是说每行要扫描640个象素,一共有480行,每秒重复扫描屏幕70次。 调色板   有一个长宽各为200个象素,颜色数为16色的彩色图,每一个象素都用R、G、B三个分量表示。因为每个分量有256个级别,要用8位(bit),即一个字节(byte)来表示,所以每个象素需要用3个字节。整个图象要用200×200×3,约120k字节,可不是一个小数目呀!如果我们用下面的方法,就能省的多。   因为是一个 16 色图,也就是说这幅图中最多只有 16 种颜色,我们可以用一个表:表中的每一行记录一种颜色的 R 、 G 、 B 值。这样当我们表示一个象素的颜色时,只需要指出该颜色是在第几行,即该颜色在表中的索引值。举个例子,如果表的第 0 行为 255 , 0 , 0( 红色 ) ,那么当某个象素为红色时,只需要标明 0 即可。   让我们再来计算一下: 16 种状态可以用 4 位 (bit) 表示,所以一个象素要用半个字节。整个图象要用 200×200×0.5 ,约 20k 字节,再加上表占用的字节为 3×16=48 字节 . 整个占用的字节数约为前面的 1/6 ,省很多吧?   这张 R 、 G 、 B 的表,就是我们常说的调色板 (Palette) ,另一种叫法是颜色查找表 LUT(Look Up Table)

CreateDIBSection

牧云@^-^@ 提交于 2020-04-04 04:18:49
理解分辨率 我们常说的屏幕分辨率为640×480,刷新频率为70Hz,意思是说每行要扫描640个象素,一共有480行,每秒重复扫描屏幕70次。 理解调色板 有一个长宽各为200个象素,颜色数为16色的彩色图,每一个象素都用R、G、B三个分量表示。因为每个分量有256个级别,要用8位(bit),即一个字节(byte)来表示,所以每个象素需要用3个字节。整个图象要用200×200×3,约120k字节,可不是一个小数目呀!如果我们用下面的方法,就能省的多。 因为是一个 16 色图,也就是说这幅图中最多只有 16 种颜色,我们可以用一个表:表中的每一行记录一种颜色的 R 、 G 、 B 值。这样当我们表示一个象素的颜色时,只需要指出该颜色是在第几行,即该颜色在表中的索引值。举个例子,如果表的第 0 行为 255 , 0 , 0( 红色 ) ,那么当某个象素为红色时,只需要标明 0 即可。 让我们再来计算一下: 16 种状态可以用 4 位 (bit) 表示,所以一个象素要用半个字节。整个图象要用 200×200×0.5 ,约 20k 字节,再加上表占用的字节为 3×16=48 字节 . 整个占用的字节数约为前面的 1/6 ,省很多吧? 这张 R 、 G 、 B 的表,就是我们常说的调色板 (Palette) ,另一种叫法是颜色查找表 LUT(Look Up Table) ,似乎更确切一些。

Hdu 3887 Counting Offspring \\ Poj 3321 Apple Tree \\BZOJ 1103 [POI2007]大都市meg

霸气de小男生 提交于 2020-04-03 07:14:09
这几个题练习DFS序的一些应用。 问题引入: 给定一颗n(n <= 10^5)个节点的有根树,每个节点标有权值,现有如下两种操作: 1、C x y 以节点x的权值修改为y。 2、Q x 求出以节点x为根的子树权值和。 最直观的做法, 枚举一个子树内所有节点的权值加和。但这种做法的每一次讯问的时间复杂度是O(n)的,很明显无法满足题目的需要,我们需要更优的解法。 我们考虑DFS序的另外一种形式,当访问到一个节点时记下当前的时间戳,我们设它为L[x], 结束访问一个节点时当前的时间戳设为R[x]。则以x为根的子树刚好是下标为L[x]和R[x]中间的点。我们看下面这个例子。 有了DFS序这个性质我们就可以讲这个问题转化成一个区间求和问题。 每一次询问的复杂度就是O(logn)级别的,完全可以接受。 另外:很多人习惯在生成DFS序的时候,叶子节点的进出时间戳差1,我习惯于叶子节点的进出时间戳一样。这样根节点的时间戳为[1,n] 比如说:上图中如果采用叶子节点进出时间戳差1的写法,DFS序为:4、3、1、7、7、1、2、6、6、2、3、5、8、8、5、4.数量为2*n 如果按照我习惯的做法,DFS序为:4、3、1、7、2、6、5、8. 两种做法都可以,我习惯于第二种。 练习题: 第一题: http://acm.hdu.edu.cn/showproblem.php?pid=3887 题意

HIT 1917 2—SAT

允我心安 提交于 2020-04-03 04:34:44
题目大意:一国有n个党派,每个党派在议会中都有2个代表, 现要组建和平委员会,要从每个党派在议会的代表中选出1人,一共n人组成和平委员会。 已知有一些代表之间存在仇恨,也就是说他们不能同时被选为和平委员会的成员, 现要你判断满足要求的和平委员会能否创立?如果能,请任意给出一种方案。( POI 0106 ) ————————————————————————————————————————— 这道题就是裸的2—SAT 不过我用了tarjan缩点 然后一波拓排 tips:一个问题无解当且仅当一个集合的两个点在同一个联通块里面 所以特判完无解之后一波拓排就可以解决问题辣 #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using std::min; const int M=17005; int read(){ int ans=0,f=1,c=getchar(); while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();} while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();} return ans*f; } int n,m; int next(int x){return x&1?x+1:x-1;}

strlen 与 sizeof 的区别

坚强是说给别人听的谎言 提交于 2020-04-03 04:25:25
void ngx_time_init(void) { ngx_cached_err_log_time.len = sizeof("1970/09/28 12:00:00") - 1; ngx_cached_http_time.len = sizeof("Mon, 28 Sep 1970 06:00:00 GMT") - 1; ngx_cached_http_log_time.len = sizeof("28/Sep/1970:12:00:00 +0600") - 1; ngx_cached_http_log_iso8601.len = sizeof("1970-09-28T12:00:00+06:00") - 1; ngx_cached_syslog_time.len = sizeof("Sep 28 12:00:00") - 1; ngx_cached_time = &cached_time[0]; ngx_time_update(); } 阅读nginx中的ngx_time_init发现对于常量字符串的操作是使用sizeof操作然后进行-1操作,可见nginx对于性能的追求与细节的完美。 sizeof是操作符而不是函数,因此可以在编译过程中直接获取,而strlen为函数需要在运行中才能获取。 附:sizeof和strlen的区别: 一、sizeof   sizeof(...

nginx 源码学习笔记(十八)—— ngx_add_inherited_sockets 继承的sockets

依然范特西╮ 提交于 2020-04-01 20:25:43
之前几节有讲过多进程的创建过程和子进程所处理的事情,今天要讲一下nginx里面main函数的另一个主要的操作ngx_add_inherited_sockets。 ngx_add_inherited_sockets:服务器监听套接字的封装。 本文的主要灵感来自: http://blog.csdn.net/livelylittlefish/article/details/7277607 ,感谢作者分享。 在ngx_add_inherited_sockets方法内,有一个重要的结构体需要讲解——ngx_listening_s src/core/ngx_connection.h typedef struct ngx_listening_s ngx_listening_t; struct ngx_listening_s { ngx_socket_t fd; //文件描述符 struct sockaddr *sockaddr; //socket地址 socklen_t socklen; //地址长度 size_t addr_text_max_len; ngx_str_t addr_text; //最终存放socket地址,之前的sockaddr主要存放没转换前的数据,之后会讲解 int type; int backlog; int rcvbuf; //接受缓冲区大小 int sndbuf; /

CF #560 div3

戏子无情 提交于 2020-04-01 04:22:58
碎碎念 只想着快了 细节考虑不周,补题时一直就奇怪当时怎么就没这么想呢, 还有题意,老是会遗漏,英文水平不够呀 还有特判问题,错误想法前的特判,改掉其他地方后特判也要改呀 对于数学规律,算出的公式看自己的解决思路来化简 写写前五题吧 后俩有空补一下 A:给定01字符串s,长度n,x,y, 0=<x<y<n;可任意对某位取反,问使得s % 10^x == 10^y需进行的最小操作数。 嘛 简单 保证s的倒数y位都为0就ok了嘛 然后倒数的 x~y位之间也都是0就可以了 嗯 搞搞, 过了,开心 早上一看 hacked了 哇 看了下代码 判断倒数第x位的时候顺手判断了一下该位是否为1, 为0则操作数++,其实保证了s没有前导0 ,x<n,那倒数x位前肯定有1存在,x位是啥就无所谓了 呜 #include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<string> #include<algorithm> #include<map> #include<queue> #include<stack> #include<list> #include<set> using namespace std; typedef long long ll; typedef pair

2、指针的算术运算

筅森魡賤 提交于 2020-04-01 03:18:51
指针可以加上或减去一个整数。 指针的这种运算的意义和通常的数值的加减 运算的意义是不一样的 ,以单元为单位。 例如: 例二: char a[20]; int *ptr=(int *)a; // 强制类型转换并不会改变 a 的类型 ptr++; 在上例中,指针 ptr 的类型是 int*, 它指向的类型是 int ,它被初始化 为指向整型变量 a 。接下来的第 3 句中, 指针 ptr 被加了 1 ,编译器是这样 处理的:它把指针 ptr 的值加上了 sizeof(int) ,在 32 位程序中,是被加上 了 4 ,因为在 32 位程序中, int 占 4 个字节。 由于地址是用字节做单位的, 故 ptr 所指向的地址由原来的变量 a 的地址向高地址方向增加了 4 个字节。 由于 char 类型的长度是一个字节,所以,原来 ptr 是指向数组 a 的第 0 号 单元开始的四个字节,此时指向了数组 a 中从第 4 号单元开始的四个字节。 我们可以用一个指针和一个循环来遍历一个数组,看例子: 例三: int array[20]={0}; int *ptr=array; for(i=0;i<20;i++) { (*ptr)++; ptr++ ; } 这个例子将整型数组中各个单元的值加 1 。由于每次循环都将指针 ptr 加 1 个单元 ,所以每次循环都能访问数组的下一个单元。 再看例子:

NOIP 前夕 模板整理

时间秒杀一切 提交于 2020-03-30 16:07:33
归并排序: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int a[1200],s[1200],n; 6 void megre_sort(int l,int r) 7 { 8 if(l==r) return ; 9 int mid=(l+r)/2; 10 megre_sort(l,mid);megre_sort(mid+1,r); 11 int i=l,j=mid+1,k=l; 12 while(i<=mid&&j<=r) 13 { 14 if(a[i]<=a[j]) 15 s[k++]=a[i++]; 16 else 17 s[k++]=a[j++]; 18 } 19 while(i<=mid) 20 s[k++]=a[i++]; 21 while(j<=r) 22 s[k++]=a[j++]; 23 for(int i=1;i<=r;i++) 24 a[i]=s[i]; 25 } 26 int main() 27 { 28 scanf("%d",&n); 29 for(int i=1;i<=n;i++) 30 scanf("%d",&a[i]); 31 megre_sort(1,n); 32 for(int i=1;i<=n;i++) 33 printf

专题训练之树状数组

一曲冷凌霜 提交于 2020-03-30 09:18:20
推荐几个博客:https://blog.csdn.net/int64ago/article/details/7429868搞懂树状数组 https://blog.csdn.net/z309241990/article/details/9615259区间修改 https://blog.csdn.net/whereisherofrom/article/details/78922383完整版+题集 http://www.cnblogs.com/wuyiqi/archive/2011/12/25/2301071.html二进制思想求第k大数 http://www.cnblogs.com/oa414/archive/2011/07/21/2113234.html二分/二进制思想求第k大数 一维树状数组模板(区间求和、单点修改) 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int maxn=1e5+10; 6 int bit[maxn],n; 7 8 int lowbit(int x) 9 { 10 return x&(-x); 11 } 12 13 void add(int k,int num) 14 { 15 while ( k<=n ) { 16