cstring

swift中是16进制设置UIColor

你。 提交于 2020-08-12 10:12:31
在项目开发中,控件颜色的设置是必须的,但很多时候我们获取到的都是16进制的色彩值,为了方便使用,对UIColor做了一些简单的扩展,以便于直接使用16进制设置 extension UIColor { ///随机色 class var random:UIColor { return UIColor(red: CGFloat(arc4random_uniform(256))/255.0, green: CGFloat(arc4random_uniform(256))/255.0, blue: CGFloat(arc4random_uniform(256))/255.0, alpha: 1) } /// 通过哈希值返回颜色 /// /// - Parameter hexColor: 哈希值 /// - Returns: <#return value description#> class func hexColor(_ hexColor:Int) ->UIColor { let red = CGFloat((hexColor & 0xFF0000) >> 16)/255.0 let green = CGFloat((hexColor & 0xFF00) >> 8)/255.0 let blue = CGFloat(hexColor & 0xFF)/255.0 return UIColor

2019ICPC徐州站M题

我与影子孤独终老i 提交于 2020-08-12 08:40:28
前天在复现赛开M自闭两天,全网找不到题解,后来偶遇cometoj群中的Acmer帮我解决困惑,在此匿名感谢qq名称为不好好学习不改名同学,以下思路均由他提供,也希望为后来人提供一定的思路和想法 题解: 首先很容易看出这是道求树的重心的问题,但是由于他要求所有子树的重心,所以暴力求解会超时,因此我们需要进行剪枝,剪枝需要几点性质 1.两个树合并之后树的重心在之前两棵树重心的连线路径上。 2.如果子树的节点数大于父树节点树的一半,那么父树重心可以由该子树转移而来,因为重心的意义就是代表除去该点后最大联通子树的节点数的最小值,所以我们把子树的节点数*2-父树的节点数作为贡献度,大于0就能转移。 然后就能做啦,注意的一点是,一棵树有可能有两个重心,两个重心必定相邻,因此只需要考虑当贡献度为0的时候就是两个答案。 复杂度因为我并不擅长求复杂度,但是据说是O(N)的 代码如下,代码中也有注释: #include<iostream> #include <cstdio> #include <cstring> #include <cmath> #include <functional> #include < string > #include <algorithm> #include <iostream> #include < set > #include <vector> #include

swfit对字符的MD5处理

蓝咒 提交于 2020-08-12 08:31:07
版本swift5.0,extension我最爱 import CommonCrypto extension String { var md5:String { if let utf8 = cString(using: .utf8) { var digest = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH)) CC_MD5(utf8, CC_LONG(utf8.count - 1), &digest) let result = digest.reduce("") { $0 + String(format:"%02X", $1) } return result }else{ return self } } } 来源: oschina 链接: https://my.oschina.net/wshzj/blog/4307856

2019ICPC徐州站M题

冷暖自知 提交于 2020-08-12 04:04:45
前天在复现赛开M自闭两天,全网找不到题解,后来偶遇cometoj群中的Acmer帮我解决困惑,在此匿名感谢qq名称为不好好学习不改名同学,以下思路均由他提供,也希望为后来人提供一定的思路和想法 题解: 首先很容易看出这是道求树的重心的问题,但是由于他要求所有子树的重心,所以暴力求解会超时,因此我们需要进行剪枝,剪枝需要几点性质 1.两个树合并之后树的重心在之前两棵树重心的连线路径上。 2.如果子树的节点数大于父树节点树的一半,那么父树重心可以由该子树转移而来,因为重心的意义就是代表除去该点后最大联通子树的节点数的最小值,所以我们把子树的节点数*2-父树的节点数作为贡献度,大于0就能转移。 然后就能做啦,注意的一点是,一棵树有可能有两个重心,两个重心必定相邻,因此只需要考虑当贡献度为0的时候就是两个答案。 复杂度因为我并不擅长求复杂度,但是据说是O(N)的 代码如下,代码中也有注释: #include<iostream> #include <cstdio> #include <cstring> #include <cmath> #include <functional> #include < string > #include <algorithm> #include <iostream> #include < set > #include <vector> #include

MFC经验

半世苍凉 提交于 2020-08-12 00:00:27
MFC框架各部分指针获取方式: 记住,是获取 指针 MFC消息流程图: string CString char* 的互相转换: string 转 CString   CString.Format("%s", string.c_str()); //用c_str()比data()好    char 转 CString   CString.Format("%s", char*); // 可以直接给CString赋值 ,不要用Format      char* 转 string   string s(char *);        CString 转 string   string s(CString.GetBuffer()); //测试显示 可以直接用CString 赋给string , //因CString 有operator LPCTSTR 不拷贝 只返回指针   string 转 char *   char *p = string.c_str(); CString 转char * CString.GetBuffer(); 可直接赋值,不用转换,因为LPCTSTR在CString中被重载了. 一条重要经验: 如果我们的类/结构体中有CArray(或CList等其他的派生自CObject类,即很多的控件类)的成员变量,我们最好添加上一个public类型的operator=运算赋重载函数

[难题题解] [BZOJ1875] [SDOI2009] HH去散步

痴心易碎 提交于 2020-08-11 19:11:00
题目H有个一成不变的习惯,喜欢饭后百步走。所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离。 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回。 又因为HH是个喜欢变化的人,所以他每天走过的路径都不完全一样,他想知道他究竟有多 少种散步的方法。 现在给你学校的地图(假设每条路的长度都是一样的都是1),问长度为t,从给定地 点A走到给定地点B共有多少条符合条件的路径. 对于100%的数据,$N ≤ 20,M ≤ 60,t ≤ 2^{30},0 ≤ A,B $ 题解 既然n<=20,考虑开个邻接矩阵$table$存图 先考虑暴力,设$dp[i][j]$表示还需走i段路,当前走到了j这个点 易得$dp[i][j]=sum(dp[i+1][k]*table[j][k])+1$ 然后无脑dfs即可 #include <iostream> #include <cstdio> #include <vector> using namespace std; int table[21][21],dp[21][11],n,a,b; void dfs(int id,int from,int t) { //if(dp[id][from]) return; if(!t) { dp[id][t]+=(id==b); return; } for(int i=0;i<n;i++) {

差分数组

旧时模样 提交于 2020-08-11 11:16:25
首先它就是一个数组,主打 辅助 偏向于区间的操作,因为如果我们去枚举每一个数去操作,操作次数过多且数据量大的话,这种方法容易超时。 但是我们发现,它一般区间的操作都是 统一加或者减某个数等 (其他神操作不赘述),然后我们可以得知,这些操作比较的 单调 ?死板? 这样我们其实可以去将它们转化一下 比如差分??? 假设我们现在有一个数组 1 3 4 6 2 7 9 2 然后我们去求出它的差分数组 其实就是 d[i]=a[i]-a[i-1] ; 则我们可以表示出来 0 2 1 2 -4 5 2 -7 其实如果我们此时修改的话,最后中间发生某个区间,假设【2,4】发生改变,但是不会影响前面与后续区间的求解(有点抽象) 举个栗子,我们将【2,4】同时加上3,则差分数组会变化为: 0 2+3 1 2 -4-3 5 2 -7 0 5 1 2 -7 5 2 -7 这就是改变一个区间的所有数值的操作 实质上就是 d[2]+=3,d[4+1]-=3; 详细可以看P1083的代码如最下面。。。 算了我不是一个好老师 直接上傻瓜式代码 ... //求出差分数组 for(long i=1;i<=n;i++) d[i]=a[i]-a[i-1]; //区间加法 for(long i=1;i<=n;i++){ cin>>left>>right>>tt; dist[left]+=tt; dist[right]-

CCF--差分约束 201809再卖菜

自作多情 提交于 2020-08-10 22:41:35
问题描述   在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜。   第一天,每个商店都自己定了一个正整数的价格。店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己和相邻商店的价格调整自己的价格。具体的,每家商店都会将第二天的菜价设置为自己和相邻商店第一天菜价的平均值(用去尾法取整)。   注意,编号为1的商店只有一个相邻的商店2,编号为n的商店只有一个相邻的商店n-1,其他编号为i的商店有两个相邻的商店i-1和i+1。   给定第二天各个商店的菜价,可能存在不同的符合要求的第一天的菜价,请找到符合要求的第一天菜价中字典序最小的一种。   字典序大小的定义:对于两个不同的价格序列(a 1 , a 2 , ..., a n )和(b 1 , b 2 , b 3 , ..., b n ),若存在i (i>=1), 使得a i <b i ,且对于所有j<i,a j =b j ,则认为第一个序列的字典序小于第二个序列。 输入格式   输入的第一行包含一个整数n,表示商店的数量。   第二行包含n个正整数,依次表示每个商店第二天的菜价。 输出格式   输出一行,包含n个正整数,依次表示每个商店第一天的菜价。 样例输入 8 2 2 1 3 4 9 10 13 样例输出 2 2 2 1 6 5 16 10 数据规模和约定   对于30%的评测用例,2<

第九届蓝桥杯省赛第八题---日志统计

你离开我真会死。 提交于 2020-08-10 14:10:43
标题:日志统计 小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞"。 现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为D的时间段内收到不少于K个赞,小明就认为这个帖子曾是"热帖"。 具体来说,如果存在某个时刻T满足该帖在[T, T+D)这段时间内(注意是左闭右开区间)收到不少于K个赞,该帖就曾是"热帖"。 给定日志,请你帮助小明统计出所有曾是"热帖"的帖子编号。 【输入格式】 第一行包含三个整数N、D和K。 以下N行每行一条日志,包含两个整数ts和id。 对于50%的数据,1 <= K <= N <= 1000 对于100%的数据,1 <= K <= N <= 100000 0 <= ts <= 100000 0 <= id <= 100000 【输出格式】 按从小到大的顺序输出热帖id。每个id一行。 【输入样例】 7 10 2 0 1 0 10 10 10 10 1 9 1 100 3 100 3 【输出样例】 1 3 资源约定: 峰值内存消耗(含虚拟机) < 256M CPU消耗 < 1000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。 注意: main函数需要返回0; 只使用ANSI C/ANSI C++ 标准;

hdu2609 How many (最小表示法)

故事扮演 提交于 2020-08-10 06:40:54
http://acm.hdu.edu.cn/showproblem.php?pid=2609 题意: 给出n个字符串,如果字符串A循环同构可变成B,则A与B是相同的,问有多少个不同的字符串。 用最小表示法表示出每个字符串,然后map判重即可 最小表示法转向 https://www.cnblogs.com/TheRoadToTheGold/p/7040955.html #include<map> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define N 10001 string a[N]; char s[ 1000001 ]; int len; map < string , int > mp; int getmin() { len = strlen(s); int i= 0 ,j= 1 ,k; while (i<len && j< len) { k = 0 ; while (k<len && s[(i+k)%len]==s[(j+k)%len]) k++ ; if (k==len) break ; if (s[(i+k)%len]<s[(j+k)%len]) j=max(i+ 1 ,j+k+ 1 ); else i=max(j