st

字符串常用的一些方法

纵饮孤独 提交于 2020-03-03 06:59:19
字符串的常用操作方法(不常用的暂未列举):st="abc" c st.capitalize()----首字母大写 st.count()----统计括号里的字符串在字符串中出现的次数 st.center()----两个参数,一个是几个字符串,一个是用什么隔开 >>> st.center(10,"*") '***abc****' e st.endswith()----判断这个字符串是不是以括号内的字符串结尾 f st.fiind()----在字符串里查找括号里的字符串,取开头的索引 st.format()----占位字符使用 >>> "{name} is {age} years old".format(name="hhl",age=23) 'hhl is 23 years old' i st.isalnum()----判断是不是只是字母跟数字 st.isalpha()----判断是不是纯字母 st.isdigit()----判断是不是整数 st.isidentifiier()----判断是不是一个合法的标识符(即合法的变量名) st.islower()----判断是不是小写 st.istitle()----判断每个首字母开头是不是大写 st.isupper()----判断是不是大写 j st.join()----列表转换成字符串,以“,”隔开 >>>print( ",".join([

CF815D Karen and Cards 单调栈+扫描线

风格不统一 提交于 2020-03-02 18:35:15
非常好的一道题. 我们考虑枚举哪些三元组不能成为答案. 然后你发现这成了一个立方体并问题. 通过枚举 $c$ ,可以将问题转化为二维矩形并问题. 由于从大到小枚举 $c$,所以并是不断增大的,然后增大的话就会让 $a/b$ 延伸到极大值位置. 所以只有 $a,b$ 是单调的,才会对答案有影响,这么更新就行了. code: #include <bits/stdc++.h> #define N 500020 #define ll long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; ll ans,sum; int n,A,B,C,top,tx,ty; int st[N],x[N],y[N]; struct node { int a,b,c; }p[N]; bool cmpa(node a,node b) { return a.a<b.a; } bool cmpc(node a,node b) { return a.c>b.c; } int main() { // setIO("input"); int i,j; scanf("%d%d%d%d",&n,&A,&B,&C); for(i=1;i<=n;++i) scanf("%d%d%d",&p[i].a,&p[i].b,&p[i].c);

4.4 贪心:A1033 To Fill or Not to Fill

元气小坏坏 提交于 2020-03-01 02:39:27
A1033 To Fill or Not to Fill With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a car is limited, we have to find gas stations on the way from time to time. Different gas station may give different price. You are asked to carefully design the cheapest route to go. Input Specification: Each input file contains one test case. For each case, the first line contains 4 positive numbers: C​max​​ (≤ 100), the maximum capacity of the tank; D (≤30000), the distance between Hangzhou and the destination city; D​avg​​ (≤20), the average distance

SenchaTouch2.1调用百度地图实例

℡╲_俬逩灬. 提交于 2020-02-29 05:34:47
SenchaTouch(以下简称st)里面使用的地图示例是采用的googleMap,但由于和谐社会的原因,google地图对我们的支持也是有心无力。在st的使用中也是经常出现无法加载googlemap的js。 但是没了谷歌地图我们依然还是要做开发。不能因为了它就不用地图了不是。下面介绍国内的地图:百度地图。读者可能有些疑惑,因为参考的api使用的都是谷歌的,如果换成百度一下子变得无从下手。故往下看文章的朋友请注意了几点 1、抛开st提供的map组件(xtype:map),在文中的调用百度地图不需要在使用到这个组件了。 2、抛开st中的map示例所提到的步骤,因为在调用百度地图的过程中并没有那么复杂。 3、闲话不多说,进入正题。 调用步骤: 1、创建st项目,详情参考另外一篇文章《Secnha Commands 3 使用详解(从创建到打包》 http://my.oschina.net/victorHomePage/blog/109654 ,项目的创建方式有很多,本文就采用命令方式。 2、打开index.html文件,加入以下代码。 <!--添加下面的meta标签: --> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <!--这样做是为了让页面以正常比例进行显示并且禁止用户缩放页面的操作。

动态dp和dp套dp

℡╲_俬逩灬. 提交于 2020-02-29 00:00:49
概述 这是两类特别的 \(dp\) 种类,分别是带修改的 \(dp\) ,与 \(dp\) 过程本身息息相关的 \(dp\) 动态dp 概述 一些简单的 \(dp\) 如果带修改怎么办 如果状态是普通设法,修改一个值的话包含这个值的所有情况都会被改,均摊 \(O(n)\) 一种粗暴的看法,我们可以让所有状态包含的值均摊,比如用倍增划分区间的设法,让均摊被包含的状态数变为 \(\log\) ,但这个说法很模糊,我们并不知道什么状态可以倍增 事实上,这牵扯到一个很重要的东西,"转移"这个运算有 结合律 否 如果有的话,我们就可以一段一段的维护,合并,在树上就可以通过各种平衡树或树剖分成一条一条重链来处理 很多矩阵的新定义都具有结合律 多余的提一句,在树上,刚才这种方式又可以用只 \(dp\) 关键点的的虚树 \(dp\) 替代 问题 \(\mathtt{BSOJ5290}\) 支持修改点权,动态求树的最大独立集 考虑普通 \(dp\) 设 \(f_{i,0/1}\) 表示 \(i\) 点不选/选子树的最大独立集,答案就是 \(\max\{f_{1,0},f_{1,1}\}\) \(f_{x,0}=\sum\limits_{y\in son_x}\{f_{y,0},f_{y,1}\}\) \(f_{x,1}=\sum\limits_{y\in son_x}f_{y,0}+a_x\)

AcWing 324. 贿赂FIPA

谁说我不能喝 提交于 2020-02-28 21:52:40
题目链接 大型补档计划 \(f[i][j]\) 表示第 \(i\) 个国家,获得 \(j\) 个国家支持,用的最少花费 \(f[i][0] = 0\) \(f[i][sz[i]] = w[i]\) 对于每条边 \((u, v)\) 枚举 \(u\) 的第二维 \(j\) , \(v\) 的第二维 \(k\) \((k <= j)\) \(f[u][j] = min(f[u][j], f[v][k] + f[u][j - k])\) #include <cstdio> #include <iostream> #include <map> #include <string> #include <cstring> #include <sstream> using namespace std; const int N = 205; int n, m; int head[N], numE = 0, out[N], idx = 1; map<string, int> st; int sz[N], f[N][N], w[N]; struct E{ int next, v; } e[N]; void add(int u, int v) { e[++numE] = (E) { head[u], v }; head[u] = numE; } void dfs(int u) { sz[u] = 1; f

1101. 献给阿尔吉侬的花束

旧城冷巷雨未停 提交于 2020-02-28 20:29:51
题目链接: https://www.acwing.com/problem/content/1103/ 题解: !!! 要么在bfs内部定义queue,要么每次在进入bfs时将queue清空! !!! AC代码:#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <queue> #define x first #define y second using namespace std; typedef pair<int ,int> PII; int T; int r, c; const int N = 205; char g[N][N]; int st[N][N]; int bfs(PII start,PII end){ //坑! queue<PII> q; q.push(start); st[start.x][start.y] = 0; int dx[4] = {-1,1,0,0}; int dy[4] = {0,0,-1,1}; while(!q.empty()){ PII now = q.front(); q.pop(); // (-1,0) (1,0) (0,-1) (0,1) for(int i=0;i<4;i++){ int nx = now.x+dx

Codeforces Round #622 (Div.2) C2.Skyscrapers(hard version)

筅森魡賤 提交于 2020-02-27 20:15:12
题目链接 题解思路: 利用单调栈去找出每一个位置 i 左边第一个高度小于它的位置 L 和右边第一个高度小于它的位置 R ,然后在区间 (L,i] 所能取到的最大值即为h[ i ],这段区间对整体的贡献就是 (i - L) * h[ i ],对右边做同样处理,最后我们只需要找到它整体最大的那个位置即可。 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> PII; #define ls l,mid,rt<<1 #define rs mid+1,r,rt<<1|1 #define endl '\n' const int MAXN = 1e6+10; const double EPS = 1e-12; const ll mod = 1e9+7; int n; ll a[MAXN],l[MAXN],r[MAXN]; stack<int>st; int main() { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%lld",&a[i]); for(int i=1;i<=n;i++){ while(!st.empty()&&a[st.top()]>=a[i])st.pop(); if(st.empty())l[i]=a[i]

Codeforces-1313C2-Skyscrapers (hard version)(单调栈)

烈酒焚心 提交于 2020-02-26 22:25:06
题目链接 题意 大小为n的数组表示摩天大楼的最大层数,要一个单峰的序列,求n栋楼的层数总和的最大值。 思路 easy版本可以用n2的方法,选取顶峰,然后求层数。 用单调栈可以O(n)解决。 单调栈基本思路讲解 大概就是,用单调栈,就可以用O(n)的复杂度解决,数组向左(右)遍历,第一个比它小(大)的值。所以给一个数组a[n],就可以得到比a[i]小,在 i 的左边且位置离 i 最近的a[j],可以把这个位置存到一个数组中。 用O(n)得到这个数组之后,对这个题来看,用dp的思想,得到一个前缀 l [n]的东西,表示以 i 为顶峰,左边的最大层数是多少。 求 l [i] ,找到比 a[i] 小的第一个数,位置是t,那么t前面这t个数就一定是可以的,因为是递增。 然后只需要把t到i中间这些数降低成为a[i]就可以(a[n]是楼的最高层数) 转移方程就是 l[i] = l[t] + (i-t) * a[i] 这只是求出来了峰值左边的最大,右边同理。然后走一遍求一下峰值在哪里总和最大就可以了。 代码参考 #include <bits/stdc++.h> #define ll long long #define inf 0x3f3f3f3f using namespace std; const int N = 5e5+10; ll l[N],r[N],st[N],k; int n,a[N];

刷题84. Largest Rectangle in Histogram

别等时光非礼了梦想. 提交于 2020-02-26 09:04:25
一、题目说明 题目84. Largest Rectangle in Histogram,给定n个非负整数(每个柱子宽度为1)形成柱状图,求该图的最大面积。题目难度是Hard! 二、我的解答 这是一个 看起来容易,做起来很容易错的题目 。我开始用的是“挖坑法”,遗憾的是总是 Time Limit Exceeded 。经过10次优化,还是很难看。 class Solution{ public: int largestRectangleArea(vector<int>& heights){ int len = heights.size(); if(len<1) return 0; if(len==1) return heights[0]; int result = 0; int start=len-1,end=0; int cnt = 0,sum=0; int min; while(1){ min = INT_MAX; for(int i=0;i<len;i++){ if(heights[i]>0 && heights[i]<min){ min = heights[i]; } } //找到第1个正的 while(end<len && heights[end]<=0){ end++; } while(start>0 && heights[start]<=0){ start--; } if