sol

【POJ HDOJ leetcode】括号匹配合法性及最长括号匹配

时光毁灭记忆、已成空白 提交于 2021-02-17 05:32:35
/* 1. string parenthesis 给出一个由()组成的字符串判断合法性,如()合法, (, (((不合法. 2. 给出一串()字符串,求出最长连续括号匹配的长度及其位置 */ #include <iostream> #include <stdio.h> #include <stack> using namespace std; class Solution { public : bool isValid( const string & s) { if (s == "" ) { return true ; } stack < char > stk; size_t size = s.size(); for (size_t i = 0 ; i < size; i++ ) { if (s[i] == ' ( ' ) { stk.push(s[i]); } else { if (stk.empty()) return false ; stk.pop(); } } return stk.size() == 0 ; } }; pair < int , int > NumOfMatch( const char * str) { if (str == NULL) return { 0 , 0 }; const char * p = str; int nLeft = 0 ; //

[CF995F]Cowmpany Cowmpensation

為{幸葍}努か 提交于 2021-02-15 06:04:00
codeforces description 一棵$n$个节点的树,给每个节点标一个$[1,m]$之间的编号,要求儿子的权值不大于父亲权值。求方案数。$n\le3000,n\le10^9$ sol 可以证明答案是关于$m$的一个$n$次多项式。我不会证。 如果$P(x)$是关于$x$的$n$次多项式,则有 $$P(x)=\sum_{i=0}^{n}(-1)^{n-i}P(i)\frac{x(x-1)...(x-n)}{(n-i)!i!(x-i)}$$ 可见杜教$\mbox{PPT}$《多项式与求和》。 所以只要对$[1,n]$求答案就可以了,很显然是一个$O(n^2)$的$dp$,所以复杂度是$O(n^2)$。 code #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int gi(){ int x=0,w=1;char ch=getchar(); while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar(); if (ch=='-') w=0,ch=getchar(); while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar(); return w?x:-x; } const int

BUUCTF-writeup

独自空忆成欢 提交于 2021-02-14 11:12:00
Reverse RSA 使用openssl模块 rsa -pubin -text -modulus -in pub.key得到n值,在 factordb.com上 分解大素数得到p,q值,脚本生成 private.pem。 # coding=utf-8 import math import sys from Crypto.PublicKey import RSA keypair = RSA.generate(1024 ) keypair.p = 2859604688904516379356294403726392834xx keypair.q = 3040087416046019244943281559752724184xx keypair.e = 65537 keypair.n = keypair.p Qn = long((keypair.p - 1) * (keypair.q - 1 )) i = 1 while (True): x = (Qn * i) + 1 if (x % keypair.e == 0): keypair.d = x / keypair.e break i += 1 private = open( ' private.pem ' , ' w ' ) private.write(keypair.exportKey()) private.close()

决策单调性优化dp

坚强是说给别人听的谎言 提交于 2021-02-11 23:19:56
决策单调性: 对于一些dp方程,经过一系列的猜想和证明,可以得出,所有取的最优解的转移点(即决策点)位置是单调递增的。 即:假设f[i]=min(f[j]+b[j]) (j<i) 并且,对于任意f[i]的决策点g[i],总有f[i+1]的决策点g[i+1]>=g[i](或者<=g[i]) 那么,这个方程就具备决策单调性。 这个有什么用吗? 不懂具体优化方法的话确实也没有什么用。可能还是n^2的。只不过范围可能少了一些。 一 经典入门例题: Description: [POI2011]Lightning Conductor 已知一个长度为n的序列a1,a2,...,an。 对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p - sqrt(abs(i-j)) Solution: 题目转化一下:就是对于每个i,找到aj+sqrt(abs(i-j))的最大值。 首先必须要先证明决策单调性: 当i>j时,即aj+sqrt(i-j)<=ai 假设对于i位置的决策点为g[i],那么对于任意的正数k,满足a[g[i]-k] + sqrt(i-g[i]+k) <= a[g[i]] + sqrt(i-g[i]) 当i变成i+1 的时候, 因为幂函y = sqrt(x)是下凸的, 因为i-g[i]+k < i-g[i] 所以, sqrt(i+1-g[i]+k)-

truffle+ganache-cli构建简单以太坊智能合约并编译部署

流过昼夜 提交于 2021-01-29 05:08:48
以前接触过以太坊工具链来做区块链练手项目,后来荒废了,如今再次捡起来,算是回忆和加深。 之前可能因为网络的原因,在truffle各种初始化编译合成智能合约都遇到了好多问题,如今再次尝试,发现可以很快入门。 下面来看看如何通过truffle与ganache-cli来构建以太坊合约。 以太坊工具链就不多介绍了,这里面水很深,内容很多,本文需要的主要的就是node环境,然后就是ganache服务,部署合约的时候需要这个服务。truffle是进行合约编译部署的工具,可以初始化项目,编译合约,合成合约,部署合约。 下面来看看如何做一个简单的智能合约。 1、磨刀不误砍柴工; 假定我们已经安装了node环境以及npm等工具。需要全局安装truffle,ganache-cli npm install truffle ganache-cli -g 安装好之后,我们可以看看版本信息: truffle自带solidity版本是0.5.16,web3版本是1.2.9 ganache-cli是ethereum-testrpc的替代,所以不用再安装testrpc了。 我们可以现在就启动ganache服务,它会监听localhost下的8545端口 2、牛刀小试 建立文件夹、初始化以太坊合约项目,编写智能合约。 contracts/HelloWorld.sol 合约文件需要放在contracts目录下

利用mocha进行以太坊智能合约编译部署测试

纵饮孤独 提交于 2021-01-28 09:22:40
使用智能合约编程语言solidity编写的智能合约,除了可以直接通过以太坊的工具链truffle,ganache-cli进行测试之外,还可以结合mocha进行单元测试。 mocha单元测试本质上,还是需要对合约进行编译、部署,只不过可以通过代码的形式进行直观的操作,而不是通过truffle命令来进行编译、部署、测试。 首先,构建工程,我们可以根据构建node项目的方式构建: 添加依赖:package.json "dependencies": { "ganache-cli": "^6.12.2", "mocha": "^8.2.1", "solc": "^0.4.26", "web3": "^1.3.3" } 项目结构这里简单遵循以太坊项目的结构建立一个contracts文件夹,用来保存合约。然后在contracts目录下新建HelloWorld.sol pragma solidity ^0.4.23; contract HelloWorld{ string public name; constructor(string _name) public{ name = _name; } function getName() public view returns(string){ return name; } function changeName(string _name)

[BZOJ5290][HNOI2018]道路

两盒软妹~` 提交于 2021-01-23 09:12:08
bzoj luogu sol 考场上普及$dp$都做不来,果然是思想僵化了。 设$f[u][i][j]$表示在$u$点,上方有$i$条未修复的公路和$j$条未修复的铁路的最小花费。 转移只有两种情况,对于修公路和修铁路分开处理即可。 复杂度$O(n*40^2)$。可以卡一下空间,也就是乡村的$dp$值不用数组存而是现算。 code #include<cstdio> #include<algorithm> using namespace std; int gi() { int x=0,w=1;char ch=getchar(); while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar(); if (ch=='-') w=0,ch=getchar(); while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar(); return w?x:-x; } #define ll long long const int N = 40005; int n,s[N],t[N],a[N],b[N],c[N]; ll f[N>>1][41][41]; ll dp(int u,int i,int j) { if (u<n) return f[u][i][j]; else return 1ll*c[u]*(a[u]

ACM-ICPC 2018 南京赛区网络预赛

こ雲淡風輕ζ 提交于 2021-01-13 18:45:12
ACM-ICPC 2018 南京赛区网络预赛 B. The writing on the wall 题意: 给定一个n*m的矩形,1≤n≤10^5,1≤m≤100,矩形里有k个点被损坏,0≤k≤10^5,现在你需要计算出所有合法的矩形个数,合法是指矩形内不包括损坏的点。 sol: 首先对于每一个点,都计算出一个sum值,代表从这个位置往下走(在列上走),往下走几格能走到坏点。这一部分可以预处理做完。 然后,我们仅考虑只有两列的情况。此时,我们对sum[1][1],和sum[1][2]进行研究。刨去1×1的小矩形,考虑2×l的矩形。我们可以发现,包含第一行两个格子的所有矩形数为min(sum[1][1],sum[1][2])。然后考虑第二行,包含第二行两个格子的所有矩形数为min(sum[2][1],sum[2][2]),并且这里不包含第一行。所以这样就可以往下推了。 那么考虑多列的情况,我们对第一行进行考虑,可以发现,如果当前位置左边那个sum比它小,那么左边的所有矩形数都被左边的数给控制了,简而言之,在左边已经被算过一次了,所以可以直接拿来用。计算出左边第一个比自己小的,单调栈即可。总复杂度O(n*m)。 E. AC Challenge 吐槽:这个题貌似lintcode都有啊。。 题意: 给定每门课的a,b值,一天只能修一门课,每门课可能有先修课程。在第t天修课程得到的价值是a

由素数筛法到欧拉函数(欧拉函数,线性筛)

此生再无相见时 提交于 2021-01-11 05:43:05
###前言 蒟蒻最近准备狂补数学啦TAT 基于筛素数,可以同时快速求出欧拉函数。于是蒟蒻准备从这里入手,整理一下实现的思路。 筛素数及其一种改进写法 传统筛素数的做法(埃式筛)是,利用已知的素数,去筛掉含有此质因子的合数,十分巧妙。由于不是本文的重点,就只贴一下代码吧 #include<cstdio> #include<cmath> #define R register int const int N=100000000,SQ=sqrt(N); bool f[N]; int main(){ R i,j; for(i=2;i<=SQ;++i){ if(f[i])continue; for(j=i<<1;j<N;j+=i)f[j]=1; } /*for(i=2;i<N;++i) if(!f[i])printf("%d\n",i);*/ return 0; } 复杂度不会证,不过较近似于线性(大概是$O(n\log\log n)$的样子)。 实际上蒟蒻打了个表,N与筛的次数大概有这样的关系 为什么是近似的呢?因为每个合数会被其多个质因子都筛一遍,所以并不是严格的。 于是我们要想办法让每个合数只被筛掉一次。如何实现呢?我们可以让每个合数都只被其最小质因子筛掉(欧拉筛)。 与上面相比,这种新的更加优秀的写法有了较大的变化。代码如下,可结合注释理解,也不多讨论。 #include<cstdio

阿里P8整理出SQL笔记:收获不止SOL优化抓住SQL的本质

吃可爱长大的小学妹 提交于 2021-01-08 16:03:56
开头我先说: 有人就有江湖,有江湖就有IT系统,有IT系统就有数据库,有数据库就有SQL,SQL应用可一字概括:“"广"。加之其简单易学,SQL实现也可一字概括:“乐”。 然而,SQL虽然实现简单可乐,却极易引发性能问题,那时广大SQL使用人员可要“愁”就一个字,心碎无数次了。 缘何有性能问题?原因也可以用一字一个也可以用一字概括:“量”。当系统数据量、并发访问量上去后,不良SQL就会拖垮整个系统,我们甚至找不出哪些SQL影响了系统。即便找到也不知如何动手优化。此时的心情也可以用一字概括:“懵”。 现在本书开始带你抛除烦恼,走进优化的可乐世界! 首先教你SQL整体优化、快速优化实施、如何读懂执行计划、如何左右执行计划这四大必杀招。整这些干嘛呢?答案是,传授一个先整体后局部的宏观解决思路,走进“道”的世界。 接下来带领大家飞翔在“术”的天空。教你体系结构、逻辑结构、表设计、索引设计、表连接这五大要领。这么多套路,这又是要干嘛?别急,这是教你如何解决问题,准确地说,是如何不改写即完成SQL优化。 随后本书指引大家学会等价改写、过程包优化、高级SQL、分析函数、需求优化这些相关的五大神功。有点头晕,能否少一点套路?淡定,这还是“术”的范畴,依然是教你如何解决问题,只不过这次是如何改写SQL完成优化。 最后一个章节没套路了,其中跟随你多年的错误认识是否让你怀疑人生