ret

codeforces global round5 ABCD题解

醉酒当歌 提交于 2019-12-02 06:27:39
A. Balanced Rating Changes Description 给一个长度位n总和为0的一个序列,要求每个值除以2,对于奇数可以向上取整也阔以向下取整,且最终和依然为0 Solution 1 #include <algorithm> 2 #include <cctype> 3 #include <cmath> 4 #include <cstdio> 5 #include <cstdlib> 6 #include <cstring> 7 #include <iostream> 8 #include <map> 9 #include <numeric> 10 #include <queue> 11 #include <set> 12 #include <stack> 13 #if __cplusplus >= 201103L 14 #include <unordered_map> 15 #include <unordered_set> 16 #endif 17 #include <vector> 18 #define lson rt << 1, l, mid 19 #define rson rt << 1 | 1, mid + 1, r 20 #define LONG_LONG_MAX 9223372036854775807LL 21 #define pblank

re模块

五迷三道 提交于 2019-12-02 05:12:16
一.简介 用于string的模糊匹配,而string内置的方法是精确匹配。 二.字符匹配 1 普通字符 用于精确匹配 2 元字符 . ^ $ * + ? { } | ( ) \ . 通配符除\n其余均可匹配 ^ 位置匹配,表示开始 $ 表示结束 import re ret=re.findall("^af","afghaf") print(ret) ret=re.findall("af$","afdfggaf") print(ret) *,+,?,{}均表示重复次数 * 0~+oo + 1~+oo ? 1或0 {n,m} 表示n~m次 {1,}表示1到正无穷 [ ]一次只能匹配一个,可以表示一个匹配集,又有取消元字符的功能 [ ]中的特殊字符:\ ^取反 -表示范围 import re ret = re. findall( "[^4,5]" , "dgg4ffd5dd" ) print(ret) ret = re. findall("[^a-z,4,5]" ,"sccf5673374" ) print(ret) \:后面跟元字符,去除其特殊化,后面跟普通字符,增加特殊功能。 \d \D 表示数字 [0-9] \s \S表示空白字符[\t\n\r\f\v] \w \W表示[a-zA-Z0-9] \b匹配一个特殊字符的边界,而不是匹配特殊字符(这里的特殊字符是非字母和数字的)

二分查找算法递归和非递归实现

倾然丶 夕夏残阳落幕 提交于 2019-12-01 20:51:49
自己接触和了解过的查找算法总结起来分为3个吧: 1. 静态查找(主要是二分查找,效率较高) 2. 动态查找(二叉查找树) 3. 哈希表 首先来说二分查找吧! 基本思想: 假设在一个已经排好序的有序序列(N个元素,升序排列),首先让序列N中中间的关键字与需要查找的关键字进行比较,如果相等,则查找成功,否则利用中间位置将序列分成两个子序列,如果待查找的关键字小于中间的关键字,则在前一个子序列中同样的方法进一步查找, 如果待查找的关键字大于中间的关键字,则在后一个子序列中同样的方法进一步查找,重复以上过程一直到查找结束! 时间复杂度:O(log(n)) 空间复杂度:O(1) 代码示例: #include <stdio.h> //二分查找非递归实现 int BinSearch1(int Array[], int low, int high, int key) { int ret = -1; int mid = 0; ret = (Array != NULL) && (low >= 0) && (high > low); printf("Search Key: %d\n", key); if(ret) { while(low <= high) { mid = (low + high)/2; if(Array[mid] == key) { ret = mid; printf(

sf

橙三吉。 提交于 2019-12-01 12:24:54
#include <bits/stdc++.h> using namespace std; #define M 10005 int add[M]; struct set_ren{ int l; int r; }p[M]; int minn[M],maxx[M]; void upget(int rt) { minn[rt]=min(minn[rt*2],minn[rt*2+1]); maxx[rt]=max(maxx[rt*2],maxx[rt*2+1]); } void set_tu(int l,int r,int rt) { if(l==r) { scanf("%d",&minn[rt]); maxx[rt]=minn[rt]; return; } p[rt].l=l;p[rt].r=r; int mid=(l+r)/2; set_tu(l,mid,rt*2); set_tu(mid+1,r,rt*2+1); upget(rt); //ok } void downget(int rt) { if(add[rt]==0) return; add[rt*2]+=add[rt]; add[rt*2+1]+=add[rt]; maxx[rt*2]+=add[rt]; minn[rt*2]+=add[rt]; maxx[rt*2+1]+=add[rt]; minn[rt*2+1]+=add

Fibonacci前n项和 (矩阵乘)

最后都变了- 提交于 2019-12-01 11:32:15
大家知道 Fibonacci数列吧 , f[1]=1, f[2]=1, f[3]=2, f[4]=3…, 也就是 f[n]=f[n-1]+f[n-2],现在问题很简单,输入 n和 m,求前 n项和取模 m。 #include <iostream> #include <algorithm> #include <cstdio> #include <string> #include <cstring> #include <cstdlib> #include <map> #include <vector> #include <set> #include <queue> #include <stack> #include <cmath> using namespace std; #define mem(s,t) memset(s,t,sizeof(s)) #define pq priority_queue #define pb push_back #define fi first #define se second #define ac return 0; #define ll long long #define TLE std::ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cout.precision(10);

第一次作业1.2

偶尔善良 提交于 2019-12-01 07:22:11
一,思维导图: 二,语法认知: 1.if-else: if(条件) {语句1} else {语句2} 遇到的问题:初次使用时不清楚if与else的配对关系,再出现多个if-else的复合语句中易犯错误。 解决的办法:在多次练习中找出规律即( else与最近的 if配对)。 补充:要时刻分清==与=的区别。 2,switch: switch(表达式){ case 值1: //若符合执行代码; break; case 值2: //若符合执行代码; break; case 值3: //若符合执行代码; break; default: //若以上都不符合执行此代码; break; } 遇到的问题:没有理解“case”与“default”在语句中的实际作用。 解决的办法:加强记忆与练习。 3,for: for(赋值;循环条件;改变循环变量的表达式) { 循环式; }//若带入值不再符合条件则跳出循环。 遇到的问题:没有注意部分细节如“;”。 解决的办法:多次练习。 4,while: while(表达式) { 循环条件 } 遇到的问题:偶尔会与for弄混(使用方式) 解决的办法:加强记忆与练习。 补充:要注意for与while的小区别。 5,do-while: do { 循环体语句 }while(表达式); 遇到的问题:开始时do-while的运作方式不太了解。 解决的办法:打开书本,查看do

js人民币数字转大写

放肆的年华 提交于 2019-12-01 01:41:52
function numToCny(num) { var capUnit = ['万', '亿', '万', '圆', '']; var capDigit = { 2 : ['角', '分', ''], 4 : ['仟', '佰', '拾', ''] }; var capNum = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']; if (((num.toString()).indexOf('.') > 16) || (isNaN(num))) return ''; num = (Math.round(num * 100) / 100).toString(); num = ((Math.pow(10, 19 - num.length)).toString()).substring(1) + num; var i, ret, j, nodeNum, k, subret, len, subChr, CurChr = []; for (i = 0, ret = ''; i < 5; i++, j = i * 4 + Math.floor(i / 4)) { nodeNum = num.substring(j, j + 4); for (k = 0, subret = '', len = nodeNum.length; ((k <

字符串函数参数传入传出(字符串反转)

三世轮回 提交于 2019-11-30 16:49:53
/*** strstr.c ***/ #include<stdio.h> #include<string.h> //求字符串p中abcd出现的次数 //自定义函数接口完成业务函数和main函数分开 int getCount(char *mystr,char *sub,int *ncount) { int ret = 0; if(mystr == NULL || sub == NULL || ncount == NULL) { ret = -1; printf("one of point is NULL\n"); return ret; } int tmpCount = 0; char *p = mystr; //不要轻易改变形参的值 do { p = strstr(p,sub); if(p != NULL) { tmpCount++; p = p +strlen(sub); } else { break; } }while(*p != '\0'); *ncount = tmpCount; //间接赋值是指针存在的最大意义 return ret; } int main() { int ret = 0; char *p = "abcd11122abcd3333abcd3456abc"; int count = 0; char sub[] = "abcd"; ret = getCount

AT1919部門分け

穿精又带淫゛_ 提交于 2019-11-30 08:18:22
AT1919部門分け 异世界传送门: 洛谷AT1919 ATcoder056C 官方题解 本题解来自 题面 高橋くんのいる会社は \(N\) 人の社員からなる。社員 \(i\) と社員 \(j\) の間には、信頼度 \(w_{i, j}\) ​が定まっている。 おかげ様で会社はぐんぐん成長したため、 \(N\) 人をいくつかの部門に分けることになった。ここで、部門分けのスコアを、(部門の数)* \(K\) - (異なる部門に属する 2 人の間の信頼度の総和)と定める。 スコアの最大値を求めるプログラムを書いてください。 \((n \leq 17)\) 一句话题意 \(n\) 个人分组,不同组的人之间会产生代价,使 \(组数 * K - 总代价\) 最大化。 这题咋做 考虑到这个题人数很少,我们可以进行状压。 状态 \(f[S]\) 表示选择了 \(S\) 集合时 的状态最大值,从它的子集进行转移,则 \[f[S] = max(f[S], K + f[S'] + (新加入的人与子集中的人产生的代价))\] 但是如果每次转移的时候 \(n^2\) 计算新加入的人与子集中的人产生的代价,复杂度是不允许的。 但是我们可以计算该集合内部每个人互相的代价,而他与另一个集合人产生的代价即为两个集合并集的代价减去两个集合内部的代价。 \[设集合A, B, C = A \cup B\] \[f[A,

time模块 os模块 序列化模块 sys模块

假如想象 提交于 2019-11-29 14:10:25
一, impoert time 模块 简单的说了解两个过程: (1)时间戳时间 ==(localtime)==> 结构化时间 ==(strftime)==> 字符串,格式化时间 ret = time.localtime(20000000) ret1 = time.strftime('%Y-%m-%d %H:%M:%S',ret) print(ret1) 指定时间戳格式化 ret = time.localtime() ret1 = time.strftime('%Y-%m-%d %H:%M:%S',ret) print(ret1) print(ret1) 默认本地时间戳格式化 print(time.strftime('%Y-%m-%d %H:%M:%S')) 默认本地时间戳格式化 print(time.time) 查找当地时间戳时间 time.sleep(2) 计时方法,括号内参数为秒 (2)字符串,格式化时间 ==(strptime)==> 结构化时间 ==(mktime)==> 时间戳时间 s1 = '2018-6-19' ret = time.strptime(s1,'%Y-%m-%d') ret1 = time.mktime(ret) print(ret1) 普通查找指定字符串时间戳 ret = time.strftime('%Y-%m-1') ret1 = time