tmp

Codeforces 1221F. Choose a Square

匿名 (未验证) 提交于 2019-12-03 00:09:02
传送门 对于某个点 $(x,y)$ ,不妨设 $x<y$ 因为如果 $x>y$ 直接按 $y=x$ 对称一下即可 当且仅当正方形左下角 $(a,a)$ 满足 $a<=x$,右上角 $(b,b)$ 满足 $b>=y$ ,才能得到这个点的价值 所以发现其实是个二维偏序的问题,直接把 $(a,b)$ 看成另一个平面上的点,$(x,y)$ 放到那个平面上 这样就问题变成选一个点 $(a,b)$ ,你得到的价值为所有 $x>=a$ 并且 $y<=b$ 的点 $(x,y)$ 的价值和再减去 $a,b$ 之间的差值 考虑把点按第一关键字 $x$ 从大到小,按第二关键字 $y$ 从小到大排序,维护一个线段树表示当前 $a=x$ 的情况下 $y$ 取各个值时能够得到的最大价值 因为当前 $a=x$ 的情况下,所有 $x>a$ 的点的代价都加入了,每次加入一个点以后直接查询线段树上 $b>=y$ 和下一个点 $b<=y'-1$ 之间的那一段的最大价值,当然如果下一个点的 $x$ 和当前点不同,那么查询直接查询当前点到线段树最大位置的值即可 发现这样是有问题的,因为对于不同的 $b=y$ ,直接取点的值最大还不行,因为代价还要考虑 $-(y-x)$,所以线段树上维护的应该是点值和再减 $y$ 以后的最大值,当然要随便维护一下取最大值时 $b$ 的值 然后就没了,代码因为主体是比赛时写的,可能比较丑

爬楼梯

匿名 (未验证) 提交于 2019-12-03 00:08:02
在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。 请问计算出你可以采用多少种不同的方式爬完这个楼梯。 输入描述: 一个正整数n(n<=100),表示这个楼梯一共有多少阶 输出描述: 一个正整数,表示有多少种不同的方式爬完这个楼梯 #include<iostream> #include<vector> #include<algorithm> using namespace std; string add(string&a,string&b){ string res; int tmp=0; int i,j; for(i=a.length()-1,j=b.length()-1;i>=0&&j>=0;i--,j--){ res.push_back(char((a[i]-'0'+b[j]-'0'+tmp)%10+'0')); tmp=(a[i]-'0'+b[j]-'0'+tmp)/10; } if(j!=-1){ for(;j>=0;j--){ res.push_back(char((b[j]-'0'+tmp)%10+'0')); tmp=(b[j]-'0'+tmp)/10; } } if(i!=-1){ for(;i>=0;i--){ res.push_back(char((a[i]-'0'+tmp)%10+'0')); tmp=(a[i]-'0'+tmp)/10; } } if(tmp

2019 上海icpc网络赛 C FFT+暴力

匿名 (未验证) 提交于 2019-12-03 00:07:01
https://nanti.jisuanke.com/t/41400 对于大的情况,我们依次对a与b,a与c,c与b去卷积,然后答案就是$n^3$,卷积后减去不合法的情况 但是由于值域每次都是1e5,单组复杂度每次都是$1e5*log1e5$且常数很大 但是我们发现,只有20组n>1000 因此,对于小范围数据,我们直接使用$1000*1000$的暴力 #include<bits/stdc++.h> #define ll long long #define rep(ii,a,b) for(int ii=a;ii<=b;++ii) #define per(ii,a,b) for(int ii=b;ii>=a;--ii) using namespace std;//head const int maxn=4e5+10,maxm=2e6+10; const ll INF=0x3f3f3f3f,mod=1e9+7; int casn,n,m,k,kase=1,l,r; namespace fastio{//@支持读取整数,字符串,输出整数@ bool isdigit(char c){return c>=48&&c<=57;} const int maxsz=1e7; class fast_iostream{public: char ch=get_char(); bool endf=1

[Usaco2009 Jan]安全路经Travel

百般思念 提交于 2019-12-02 23:59:34
安全路径 题意 Solution 嗯,首先既然不能经过最后一条边,那么我们考虑建出一个最短路树 然后非树边 \(u,v,w\) ,只能影响到 \(u->v\) 这个路径上的点,因为只能往回跑 那么考虑怎么更新。一个显然的办法就是把边按照某种顺序排列,然后用并查集标记一下哪个点访问过了,可以做到 \(O(n)\) 那么按照什么顺序排序呢?我们设一个点 \(u\) 到1的距离(即最短路长度)为 \(dis_u\) 那么对于一条非树边 \(u->v\) ,设路径上其中一个点为 \(x\) ,那么这个“不经过最后一条边的次短路”的长度即为 \(dis_u+dis_v+w-dis_x\) 然后我们按照 \(dis_u+dis_v+w\) 排序,就可以快乐维护了 code: #include<bits/stdc++.h> using namespace std; struct qwq{ int u; int v; int w; int nxt; }edge[400010],e[400010]; int head[400010]; int cnt=-1; void add(int u,int v,int w){ edge[++cnt].nxt=head[u]; edge[cnt].u=u; edge[cnt].v=v; edge[cnt].w=w; head[u]=cnt; } void

shell习题-26

匿名 (未验证) 提交于 2019-12-02 23:59:01
题目要求 写一个脚本,依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么,如: Hello, root,your UID is 0. 参考答案 #!/bin/bash #这个脚本用来问候用户 #作者:猿课-阿铭 www.apelearn.com #日期:2018-12-11 cat /etc/passwd |while read line do username=`echo $line|awk -F ':' '{print $1}'` uid=`echo $line|awk -F ':' '{print $3}'` echo "Hello, $username, your uid is $uid." done 题目要求 linux系统 /home目录下有一个文件test.xml,内容如下: <configuration> <artifactItems> <artifactItem> <groupId>zzz</groupId> <artifactId>aaa</artifactId> </artifactItem> <artifactItem> <groupId>xxx</groupId> <artifactId>yyy</artifactId> </artifactItem> <!-- </artifactItem><groupId>some groupId<

搜索入门练习题4 数的拆分 题解

匿名 (未验证) 提交于 2019-12-02 23:57:01
任何一个大于 \(1\) 的自然数 \(n\) ,总可以拆分成若干个小于 \(n\) 的自然数之和。当 \(n = 4\) 时,总共有 \(4\) 种拆分方法: \(4=1+1+1+1\) \(4=1+1+2\) \(4=1+3\) \(4=2+2\) 现在给你一个数 \(n(1 \le n \le 20)\) ,请按顺序输出 \(n\) 的所有拆分方案。 输入包含一个整数 \(n(1 \le n \le 20)\) 。 输出 \(n\) 的所有拆分方案,每种方案占一行,输出格式见样例输出。 4 4=1+1+1+1 4=1+1+2 4=1+3 4=2+2 首先我们分析一下,因为 \(n \le 20\) 所以 \(n\) 最多也只能拆分成 \(n\) 个数之和,所以我开一个大小比 \(20\) 大一点的数组 ans[22] 就可以存放所有的加数了。 然后我再开一个函数 void f(int id, int tmp) 用来存放 ans[] 数组的第 id 个值,而这里的 tmp 用于表示我目前还剩下的可以用的数。比如,我调用了 f(3, 5) ,然后我将 ans[3] 设为了 2 (此时我将第 \(3\) 个加数设为了 \(2\) ),那我接下来就递归调用 f(4, 3) 了。因为我用掉了 \(5\) 里面的 \(2\) , 所以我剩下来的可以用的数就只剩下了 \(5-2=3\) 了

求x到y的最少计算次数

匿名 (未验证) 提交于 2019-12-02 23:56:01
链接: https://www.nowcoder.com/questionTerminal/45d04d4d047c48768543eeec95798ed6?orderByHotValue=1&page=1&onlyReference=false 来源:牛客网 给定两个-100到100的整数x和y,对x只能进行加1,减1,乘2操作,问最少对x进行几次操作能得到y? 例如: a=3,b=11: 可以通过3*2*2-1,3次操作得到11; a=5,b=8:可以通过(5-1)*2,2次操作得到8; 输入描述: 输入以英文逗号分隔的两个数字,数字均在32位整数范围内。 输出描述: 输出一个数字 示例1 输入 3,11 输出 3 import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()){ String str = scanner.next(); String[] str1 = str.split(","); int a = Integer

Delphi - 本地路径的创建、清空本地指定文件夹下的文件

匿名 (未验证) 提交于 2019-12-02 23:56:01
本地路径的创建 在做下载操作时,我们一般先把文件下载到本地指定的路径下,然后再做其他使用。 为了防止程序出现异常,我们通常需要先判断本地是否存在指定的路径。 以C盘Tmp文件夹为例,我们可以这样做,代码如下: 1 if not DirectoryExists ( 'C:\Tmp' ) then 2 if not CreateDir ( 'C:\Tmp' ) then 3 raise 4 Exception . Create ( 'Opps, Create New Dir Failed!' ); 清空本地指定文件夹下的文件 以C盘Tmp文件夹为例,清空Tmp下所有的文件,我们可以这样做,代码如下: 1 WINEXEC ( PCHAR ( 'CMD /C DEL /Q/F C:\tmp\*.*' ), SW_HIDE ); 2 Sleep ( 1000 ); 来源:博客园 作者: JJ_JeremyWu 链接:https://www.cnblogs.com/jeremywucnblog/p/11427564.html

C++类库

匿名 (未验证) 提交于 2019-12-02 23:52:01
include using namespace std; / 指针和引用: 指针:指向某一块内存的变量。其本身存储的信息就是内存地址的首地址,其类型决定指向内存的大小。 变量:某一块内存地址数据值的名字。 引用:已定义变量的别名。 比喻: 超市柜子: 1、第一排右数第三个--------------地址(指针) 2、柜子号为18--------------------变量名 3、18难记,谐音记忆为“要发”----引用 / //指针(int 、int&、int &、int&*、int**) //以值交换为例 //int void swap1(int a, int b) { //传进来的是形参 int tmp; tmp = a; a = b; b = tmp; } void main01() { int a = 1, b = 2; swap1(a, b); cout << "a=" << a << endl; cout << "b=" << b << endl; //交换失败,交换的是形参的值,无法达到交换的目的。 system("pause"); } //小结:形参无法改变实参的值,指针却可以。 / 因为形参是实参传递给子函数的时候定义的一个新的变量,初始时值相等 用指针的时候,传递的不是值而是实参的地址,改变的就是实参的值。 / //int void swap2(int a,

获取字符串最长不重复子串

匿名 (未验证) 提交于 2019-12-02 23:52:01
# coding:utf-8 def find_longest_no_repeat_substr(one_str): ''''' 找出来一个字符串中最长不重复子串 ''' res_list = [] length = len(one_str) for i in range(length):#分别以字符串的每个字符作为自串的第一个字符 tmp = one_str[i]#记录不重复自串的中间变量 for j in range(i + 1, length): if one_str[j] not in tmp: tmp += one_str[j] else: break res_list.append(tmp) #保存所有的不重复子串 res_list.sort(lambda x, y: cmp(len(x), len(y)),reverse = True)#根据每个不重复子串长度降序排列 return res_list[0] if __name__ == '__main__': one_str_list = ['120135435', 'abdfkjkgdok', '123456780423349'] for one_str in one_str_list: res = find_longest_no_repeat_substr(one_str) print '{0}最长非重复子串为: