st

模拟+字符串——缘分计算

自作多情 提交于 2019-11-26 20:34:26
·这种处理思路很重要撒~每次遇到这种思路的都是纯暴力 ·搬走思路 ·洛谷入口:P1898 ·题目内容: 缘分是一个外国人难以理解的中文名词。大致说来,缘分是一种冥冥中将两人(通常是情人)结合的力量。仅管这是种迷信,很多人——特别是女生——喜欢去计算它。 不幸的是,644 也是这样。有天,她问 DL:“甜心,可以算一下我们的缘分吗?”唉, DL 真的很讨厌这问题,但他无法拒绝。还好, DL 是个程序设计师,所以他只要找到一个看来不错的算法并写成一个缘分计算器就可以了。在网络上搜寻了几个小时后,他决定采用以下的缘分算法: 第一步: 取出姓名的缩写(abbreviation)并接在一起。例如,如果这对恋人叫 Jiang Yun Fan 和 Tang Yu Rou,他们的缩写就是 JYFTYR。第二步: 将每个字母用数字字符串取代。用 ST 来取代 A, ST+1 来取代 B, ST+2 来取代 C,……, ST+25 来取代 Z,其中 ST 为一个已知的正整数。例如,如果ST=81,A 就被 81 取代,B 就被 82 取代,……,Z 则被 106 取代。上面的例子JYFTYR 则被 901058610010598 取代。 第三步:重复以下操作:将相邻的两位数相加,并写下和的个位数。不难发现这个操作每进行一次,这个数字字符串就会少一位数。当这个数字变成 100 或不超过两位数(第一位是

放学

你说的曾经没有我的故事 提交于 2019-11-26 20:10:40
70分运行超时 #include <iostream> using namespace std; //结构体,记录每个路口状态和所剩时间 struct status { int color; int time; }; int r, y, g; status st[100001]; //函数,得到下一个灯色,所剩时间为最大 status nextOf(status now) { status next = { 0,0 }; switch (now.color) { case 1: {//red next.color = 3; next.time = g; break; } case 2: {//yellow next.color = 1; next.time = r; break; } case 3: {//green next.color = 2; next.time = y; break; } default:break; } return next; } //函数:需要再此灯处耗费多少时间 int cost(status now) { switch (now.color) { case 1: {//red return now.time; } case 2: {//yellow return now.time + r; } case 3: {//green return 0;

把字符串转换成整数

懵懂的女人 提交于 2019-11-26 17:41:30
题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0 思路:1、用str.trim()方法去掉前后空格 2、需要判断第一个字符是否是‘+’、‘-’号,所以加入了flag。我们只想判断第一个字符是不是正负号,如果是那就不让它参加运算,这时可以利用flag做标记,也作为最后return时的输出标记。 3、对于char字符要想转化成数字,需要 -‘0’ public class Solution { public int StrToInt(String str) { if(str.length() == 0) return 0; String st = str.trim(); int flag = 0; int m=0; if(st.charAt(0) == '+') flag = 1; else if(st.charAt(0) == '-') flag = 2; int start = flag > 0? 1:0; while(start < st.length()){ if(st.charAt(start

UVA - 11235 Frequent values ST表

匆匆过客 提交于 2019-11-26 17:03:28
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2176 题目大意:给定一个非递减数列Ai,你只需要支持一个操作:求一段区间内出现最多的数字的出现次数。 思路:st表。首先要把原序列A分成块。相等的数我们合成一块并把这一块的数的个数当做这一块的大小,那么查询原序列一段区间内出现最多的数字的出现次数不就相当于查询新序列的最大值嘛。当然在合并的时候我们还要记录一些别的信息,详情看代码注释。 # include <bits/stdc++.h> # define INF 0x3f3f3f3f using namespace std ; int a [ 100005 ] ; //原序列 int v [ 100005 ] ; //合并后序列的值 int cnt [ 100005 ] ; //合并后序列每个值出现的次数 int id [ 100005 ] ; //第i个数在合并之后的序列中的位置 int l [ 100005 ] ; //第i个位置在合并之后的左区间端点 int r [ 100005 ] ; //第i个位置在合并之后的右区间端点 int d [ 100005 ] [ 30 ] ; //st表 int MAX = 1 ; void RMQ

洛谷P3865【模板】ST表 ST表

泪湿孤枕 提交于 2019-11-26 15:58:25
网址: https://www.luogu.org/problem/P3865 题意: 静态区间最大值,且需要在$O(nlgn)$预处理,$O(1)$查询。 题解: 建立ST表,ST表是一种基于倍增的用于快速查询区间最值的数据结构,它由一个大小为$O(nlgn)$的二维数组构成,用$st[i][j]$表示从$j$到$j+2^{i-1}$的最值,$j$到$j+2^{i-1}$的长度为$2^i$,那么一半的长度就等于$2^{i-1}$,那么前半段的状态表示为$st[i-1][j]$。后半段的长度也为$2^{i-1}$,起始位置为$j+2^{i-1}$。那么后半段的状态表示为$st[i-1][j+2^{i-1}]$。所以:$st[i][j]=ope(st[i-1][j],st[i-1][j+2^{i-1}])$。 然后是查询:我们了解如下定理:$2^{log(a)+1}>a$,那么我们要查询$l$到$r$的最小值。设$len=r-l+1,t=log(len)$,根据上面的定理:$2^t>len/2$,所以从位置上来说,$l+2^t$越过了$l$到$r$的中间!因为位置过了一半,所以x到y的最值可以表示为$ope$(从$l$往后$2^t$的最值,从$r$往前$2^t$的最值)$,前面的状态表示为$st[t][l]$。设后面(从$r$往前$2^t$的最值)的初始位置是$k$,那么$k+2^t

[HAOI2010]软件安装

断了今生、忘了曾经 提交于 2019-11-26 15:52:06
题意简化 有 n 个物品和容量为 m 的背包,每个物品最多有一个先决条件物品 $(即必须选了它的先决条件物品,才能选当前物品)$ ,第 i 个物品占 $W<sub>i</sub>$ 单位空间,有 $V<sup>i</sup>$ 的价值,求最大总价值 n<=100,m<=500 solution 看到这种有先决条件且先决条件只分 (0/1) 的背包, 第一时间想到的自然是 按先决条件连边,然后跑树形背包 但是,对于此题而言建边之后不一定是一棵树 而是很多个联通块 甚至还可能会有环!!! 对于有环的情况又该怎么处理呢? 若是有环,则显然环上的点都有其必要的先决条件,也就是说要把整个环一起放入背包,所以我们可以把这个环看做是一个整体 也就是用Tarjan缩点就好 而对于每个连通块,我们把他们都向 0(虚拟) 节点连边就好 好了,现在思路很明确了 先Tarjan缩点, 然后按缩完的点,以0号节点为边建树 然后直接跑树形DP 代码 #include<bits/stdc++.h> using namespace std; #define re register #define ll long long #define in inline #define get getchar() in int read() { int t=0; char ch=get; while(ch<'0' || ch>

利用VBA批处理插入表头

ぃ、小莉子 提交于 2019-11-26 12:58:58
​沉迷于Excel里面的VBA不能自拔,一时用一时爽,一直用一直爽,真的好好用,哈哈哈~~~ 某音不是经常有人晒工资条么?自己可以打印工资条,想要多少工资就给自己发多少?看下图,这是一个工资列表,第一行是表头,从第二行开始就是具体的信息了。 财务会考虑到工资的保密性,把工资条切成一小片一小片的,单独发给员工,所以每个工资条得附上表头,否则看不懂数据对应哪一项?插个题外话,稍微有点规模的公司,都会在内网做一个工资查询系统,导入一个Excel工资表,大大减少了工作量。 手动一个个插入表头是这样子的: 复制第一行,在第3行插入复制单元格; 复制第一行,在第5行插入复制单元格; 复制第一行,在第7行插入复制单元格; 复制第一行,在第9行插入复制单元格; …… 如此往复,我们发现规律,往3、7、9、11……插入第1行。 于是,把上面繁琐重复的步骤用代码来实现。 '制作工资条按钮 Private Sub CommandButton1_Click() '往第3、5、7、9……行插入第一行,复制第1行。 Dim num As Integer Dim result As String Dim st As String num = WorksheetFunction.CountA(Columns("A:A")) * 2 For i = 3 To num - 2 Rows(i & ":" & i)

Adversarial inverse reinforcement learning(AIRL)

拈花ヽ惹草 提交于 2019-11-26 06:50:50
Overview For imitation learning, it is easy for us to have a fit on the expert behavior, However when we encounter a new situation, we can’t solve the problem. So we imagine that there is an expert strategy in the real world, and this expert strategy will give a reward function to guide our agents to learn. AIRL is based on the past GAIL. In GAIL, we directly use GAN to fit the behavior of the agent to the expert behavior, and do not directly give the reward function. This behavior will lead to our learning is not clear and not good. Migration, so we will record the function of the

set使用

随声附和 提交于 2019-11-26 01:44:59
# include <bits/stdc++.h> # define MAXN 205 using namespace std ; //集合:作用:自动去重并按升序排序——————>需要去重但是不方便开数组。 ///——————需要去掉重复元素;元素较大或者不是int型——>不能直接开散列 ///———————set保留元素本身而不考虑它的个数。set提供直接接口,加入set后自动排序。 //延伸:multiset:不唯一情况 // unordered_set: 去重不排序情况 int main ( ) { set < int > name ; set < char > name2 ; //set<node> name3; //set数组: //set<node> arrayname[MAXN]; //set只能通过迭代器iterator进行访问 set < int > :: iterator it ; //除vector,string之外的STL都不支持*(it+i) //注意不支持it<st.end()的写法。 set < int > st ; st . insert ( 3 ) ; st . insert ( 4 ) ; st . insert ( 2 ) ; st . insert ( 3 ) ; for ( set < int > :: iterator it = st

uva1336 Fixing the Great Wall

家住魔仙堡 提交于 2019-11-26 01:20:39
https://vjudge.net/problem/UVA-1336 显然最佳的移动方式一定是向左走一段,向右走一段,再向左走一段,再向右走一段......(或者反过来) 无论如何中间的会最先被修理好,所以考虑区间dp $f_{i,j,0/1}$表示修理好了$i\rightarrow j$时,所用的最小费用(注意费用提前计算) 预处理处$cl_{i,j}(i\leq j)$表示从$i$出发修理到$j$的费用 $cr_{i,j}(i\geq j)$从$i$出发修理到$j$的费用 然后就是转移了(其实还是很好想的),由于决策集合不会变小,所以可以用一个标记记录一下最小值,$O(1)$转移 #include<bits/stdc++.h> using namespace std; const int N=1005; const double inf=1000000000.0,eps=0.000001; int n,v,x,st; struct node{int c,d,x;} sec[N]; double f[N][N][2],cl[N][N],cr[N][N]; double sum[N],min0[N],min1[N],bs; void clear() { st=0,bs=0; for(int i=0;i<N;++i) { sum[i]=0,cl[i][i]=0; min0[i]