st

F Energy stones

妖精的绣舞 提交于 2019-12-01 08:31:42
题意是,有$n$个石头,每个石头有初始能量$E_i$,每秒能量增长$L_i$,以及能量上限$C_i$,有$m$个收能量的时间点,每次把区间$\left[S_i, T_i\right]$石头的能量都给收掉,石头的能量都置零重新开始增长。问最后收了多少能量。 看完题解觉得好有道理...我好菜... 考虑每个石头在多少个时间点收能量,然后每次收的能量就和这些时间点的时间间隔有关。 若时间间隔大于等于$\dfrac {C_i}{L_i}$,那么这一段对答案的贡献就是$C_i$了,统计有多少这样的段即可。 若时间间隔小于$\dfrac {C_i}{L_i}$那么对答案的贡献就是时间长度$t \times L_i$。 用两个权值树状数组可以维护对应时间长度的和及个数。 时间点可以用set维护。从前到后遍历,遇到一个$S_i$就把对应是时间加入,遇到一个$T_i + 1$就把时间删去,同时维护树状数组即可。感觉看代码就很好懂? #include <bits/stdc++.h> #define ll long long using namespace std; const int N = 2e5 + 7; int n, m; ll E[N], C[N], L[N]; set<int> st; vector<int> G[N]; struct BIT { ll tree1[N], tree2[N];

集合(set())

懵懂的女人 提交于 2019-12-01 05:33:03
文章目录 集合(set()) 用途 集合的创建 空集合的创建 单元素集合 多元素集合 强转 集合的基本操作 增 删 改 查 遍历 集合的基本运算 子集 交集 并集 差集 集合(set()) 无序 不可重复 不可更改 内部的元素是可哈希的 集合本身是不可哈希的 用{}括起来的单元素数据集 用途 去重(列表---->集合,自动去重) 关系测试 集合的创建 空集合的创建 st= set() print(st) set() st = set ( ) print ( st ) st = { } print ( type ( st ) ) # set ( ) < class 'dict' > t = { 1 } print ( type ( t ) ) # < class 'set' > 单元素集合 多元素集合 强转 li = [ "city" , "college" , "zhejiang" ] st = set ( li ) print ( st , type ( st ) ) sr = "city" st = set ( sr ) print ( st ) sr = "hello" st = set ( sr ) print ( st ) dic = { "id" : 20190101 , "name" : "tom" , "age" : 18 } st = set ( dic )

day04_集合

﹥>﹥吖頭↗ 提交于 2019-12-01 05:29:58
文章目录 集合(set) 集合的创建 空集合的创建 多元素的集合创建 强转 集合的基本操作 增 删 遍历 集合的基本运算 子集 交集 并集 集合(set) 无序 不可重复 不可更改 内部的元素是可哈希的 集合本身是不可哈希的 用途: 去重(列表—>集合,自动去重) 关系测试 集合的创建 空集合的创建 >> > st = set ( ) >> > st set ( ) >> > st = { } >> > type ( st ) < class 'dict' > >> > 多元素的集合创建 >> > st = { 1 , 2 , 3 , "a" , "b" , "c" } >> > type ( st ) < class 'set' > >> > st = { 1 , 2 , 3 , "a" , "b" , "c" , [ "a" , "b" ] } Traceback ( most recent call last ) : File "<stdin>" , line 1 , in < module > TypeError : unhashable type : 'list' 强转 集合的基本操作 增 set.add() set.update() 删 set.pop(),随机删除一个元素#集合是无序的 set.remove(),删除指定内容,不存在,会报错 set.discard()

模板 ST表

泄露秘密 提交于 2019-12-01 05:02:58
ST表,适用于解决RMQ(区间最值问题),类似于线段树和树状数组这两个算法 ST表相比于线段树,预处理的复杂度与线段树一样,而查询的复杂度则大大快于线段树 预处理 查询 ST表  O(nlogn) O(1) 线段树 O(nlogn) O(nlogn) 洛谷 P3865 【模板】ST表 ST表 : 线段树(不开O2): 线段树(开O2优化): 经比较,我们可以轻而易举的看出,当我们解决RMQ问题时,ST表的速度明显优于线段树 ST表的主体是一个二维数组: st[i][j] 。表示查询的数组的下标 i 到 i+2^j-1 如何进行预处理呢?? 首先,我们把从0~n-1的2^0的部分进行覆盖 然后向下处理 Q:处理??怎么处理?? A:不明白??那我们来举一个例子 我们以一个长度为5的数组 2^0部分覆盖过去就是 a[1],a[2],a[3],a[4],a[5] 2^1部分的长度为4,也就是下标从1到4, st[0][1]是下标为0~1的区间的最值 也就是st[0][0]和st[0][1]的最值 以此往下类推 结论:st[i][j] = min ( st[i][j-1] , st[i + 2^(j-1) ][j-1] ); 预处理函数(求最大值): inline void init(int n) { for(int i=1;i<=n;i++) { st[i][0]=a[i]; } for

说反话

三世轮回 提交于 2019-12-01 05:02:50
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。 输出格式: 每个测试用例的输出占一行,输出倒序后的句子。 输入样例: Hello World Here I Come 输出样例: Come I Here World Hello 1 #include<iostream> 2 #include<sstream> 3 #include<string> 4 #include<stack> 5 using namespace std; 6 int main(){ 7 string stri; 8 string word; 9 stack<string> st; 10 getline(cin,stri); 11 istringstream line(stri); 12 while(line>>word){ 13 st.push(word); 14 } 15 cout<<st.top(); 16 st.pop(); 17 while(!st.empty()){ 18 cout<<" "<<st.top(); 19 st.pop(); 20 } 21 return

二叉树遍历的几种实现

試著忘記壹切 提交于 2019-11-30 23:22:38
用c++是实现的二叉树的存储以及几种遍历方法 #include<iostream> #include<cstdlib> #include<stack> //使用stl中的栈模板 using namespace std; typedef struct BNode{ //定义节点的结构体 char data; //数据部分 BNode* Lc; //左孩子 BNode* Rc; //右孩子 }Bitree,*pBitree; pBitree CreatTree(pBitree root){ //利用递归存树 char c; cin>>c;//输入节点数据 if(c!='#'){ root = (pBitree)malloc(sizeof(Bitree)); root->data=c; root->Lc=CreatTree(root->Lc); root->Rc=CreatTree(root->Rc); } else root = NULL; return root; } void norecursionInorder1(pBitree root){ //不用递归的中序遍历1 stack<pBitree> st; pBitree p; st.push(root); while(!st.empty()){ while(st.top()!=NULL) { p=st.top(); st

字符串操作

杀马特。学长 韩版系。学妹 提交于 2019-11-30 18:24:22
对字符串的操作 #String 内容 a = "Let's go" 乘法操作:   print('hellow'*2) 通过索引获得字符串中字符,这里和列表的切片操作是相同的,具体内容见列表:   print('hellow woeld'[2:])从位置2取到最后 成员运算符操作,字符中包含给定字符则返回True: print('e2l' in 'hello') 存在返回True 不在返回False 例如: print(123 in [12,123,1111]) 结果:True 格式化字符串:   print('alex is a good teacher')   print('%s is a good teacher'%'alex') 字符串的拼接:   a='123'   b='456'   c = a+b   print(c) 结果: 123456 拼接:join方法 a='123' b='abc' c='000' d = '#####'.join([a,b,c]) 结果: 123####abc####000 python内置方法: 1 #_auther_="stuwu79" 2 #date:2019/9/27 3 4 st = 'hello kitty {name} is {age}' 5 st.count("l")#计算'l'个数 6 st.capitalize()

绵阳东辰国际test.10.7eve

允我心安 提交于 2019-11-30 18:14:44
咕咕咕(gugugu) 【题目描述】 有一个长度为N的数轴,数轴的范围从 1 到 N 还有 M 个区间,其中第i个区间是 [Li,Ri] 并且有一个权值 Vi 。定义一个选择区间的方案是合法的,当且仅当数轴上每一个整点都被至少一个区间覆盖了,同时该方案的权值是所有选择区间的权值乘积。 ​ 请你求出所有合法方案权值的和。由于答案可能很大,请输出其对 1e9+7 取模的结果。 【输入格式】 第一行两个正整数 N,M 。 ​ 接下来 M 行,第 i 行先是两个正整数 Li,Ri 描述区间,然后一个非负整数 Vi 描述区间的权值。 【输出格式】 ​ 输出仅一行,表示答案对 1e9+7 取模的结果。 【数据范围】 1<=N,M<=2e5+5,Vi<1e9+7 蒟蒻分析 :首先来个排序就 nlogn ,然后在 On 扫一遍得到答案,结果发现扫不来呀! 蒟蒻总结 :思维就陷进了出题人的圈套里, 总是想怎么样组成方案,组成方案后答案怎么统计 ,结果正解根本不是这么想的,其实当时就明白了这样想是 死路一条 ,但就是偏偏 往里钻 solution by jklover %% 将所有区间按照左端点 Li 从小到大排序后, 设 f(i,j) 表示考虑了前 i 个区间,所有覆盖了 [1,j] 的方案的权值和. 转移时 ,若不选第 i 个区间,则 f(i,j)+=f(i−1,j) 若选第 i 个区间,则只能从

CSP-S 模拟53 题解

ⅰ亾dé卋堺 提交于 2019-11-30 16:21:43
题解: T1 u: 一看到修改这么多,但询问其实只有一个不难想到差分,但是他这个形状可以说很不规则,于是我们想到分别维护竖着的和斜着的差分,然后最后合并即可。 考场上瞎调了一波系数莫名AC,其实是维护差分的差分。 考试时发现对拍暴力输不出来东西时,慌的不行,对拍的数据范围一定要搞对。 1 //weihu xiezhede chafen? 2 //对于每个满足 x ∈ [r, r +l), y ∈ [c, x−r +c] 3 //的元素 (x, y),将权值增加 s。 4 #include<bits/stdc++.h> 5 using namespace std; 6 #define int long long 7 #define sc(x) printf("%lld\n",x) 8 const int N=1e3+10; 9 int cf[N][N],cf1[N][N],n,q,a[N][N]; 10 signed main(){ 11 //freopen("data.in","r",stdin); 12 //freopen("my.out","w",stdout); 13 scanf("%lld%lld",&n,&q); 14 if(!q){puts("0");return 0;} 15 for(int i=1;i<=q;++i){ 16 int r,c,l,s; 17

第一周任务Largest Submatrix of All 1’s

限于喜欢 提交于 2019-11-30 16:14:46
Largest Submatrix of All 1’s Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 9512 Accepted: 3406 Case Time Limit: 2000MS Description Given a m -by- n (0,1)-matrix, of all its submatrices of all 1’s which is the largest? By largest we mean that the submatrix has the most elements. Input The input contains multiple test cases. Each test case begins with m and n (1 ≤ m , n ≤ 2000) on line. Then come the elements of a (0,1)-matrix in row-major order on m lines each with n numbers. The input ends once EOF is met. Output For each test case, output one line containing the number of