cstring

【赛时总结】◇赛时·VI◇ Atcoder ABC-104

时光怂恿深爱的人放手 提交于 2020-05-04 05:14:24
◇赛时·VI◇ ABC-104 ◆??? 莫名爆炸……ABC都AK不了 QwQ C题竟然沦落到卡数据的地步;D题没有思路,直接放弃 ⋋( ◕ ∧ ◕ )⋌ ◆ 题目&解析 ◇A题◇ Rated for Me +传送门+ 【题意】 给出比赛的场次;将场次小于1200的编为"ABC",场次大于等于1200小于2800的编为"ARC",场次大于等于2800小于4208的编为"AGC";输出编号。 【解析】 个人觉得不需要讲……题目读懂,if语句一写就好了……(萌新reader如果不太懂可以在文末邮箱email) 【源代码】 1 /* Lucky_Glass */ 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int main() 7 { 8 int n;scanf( " %d " ,& n); 9 if (n< 1200 ) printf( " ABC\n " ); 10 else if (n< 2800 ) printf( " ARC\n " ); 11 else printf( " AGC\n " ); 12 return 0 ; 13 } ◇B题◇ AcCepted +传送门+ 【题意】 给出一个长度在4到10的字符串,一个字符串的结果为"AC"当且仅当

[NOIP2017(TG/PJ)] 真题选做

早过忘川 提交于 2020-05-04 05:08:54
[NOIPTG2017] 小凯的疑惑 题意    小凯有两种面值的金币,每种金币有无数个,求在无法准确支付的物品中,最贵的价值是多少金币。 分析    设两种金币面值分别为 $a$ 和 $b \; (a<b)$ ,答案为 $x$,则有$$x \equiv ma \, (mod \; b) \; (1 \leq m \leq b-1)$$   即$$x=ma+nb \; (1 \leq m \leq b-1)$$   显然当 $n \geq 0$ 时 $x$ 可以用 $a,b$ 表示出来,不合题意   因此当 $n=-1$ 时 $x$ 取得最大值,此时 $x=ma-b$   显然当 $m=b-1$ 时 $x$ 最大,此时 $x=(b-1)a-b=ab-a-b$   因此 $a,b$ 所表示不出的最大的数是 $ab-a-b$ [NOIPPJ2017] 棋盘 题意    在一个棋盘上,棋盘上每一个格子可能是红色、黄色或没有颜色的。你可以向上下左右四个方向走,但所经过的格子必须是有颜色的。当你从一个格子走向另一个格子时,如果两个格子的颜色相同,那你不需要花费金币;如果不同,则你需要花费1 个金币。   另外, 你可以花费2 个金币使用魔法让下一个无色格子暂时变为你指定的颜色。但如果你使用了这个魔法,走到了这个暂时有颜色的格子上,你就不能继续使用魔法;只有当你离开这个位置

[BZOJ4888][TJOI2017]异或和(树状数组)

耗尽温柔 提交于 2020-05-04 04:31:10
题目描述 在加里敦中学的小明最近爱上了数学竞赛,很多数学竞赛的题都是与序列的连续和相关的。所以对于一个序列,求出它们所有的连续和来说,小明觉得十分的简单。但今天小明遇到了一个序列和的难题,这个题目不仅要求你快速的求出所有的连续和,还要快速的求出这些连续和的异或值。小明很快的就求出了所有的连续和,但是小明要考考你,在不告诉连续和的情况下,让你快速求是序列所有连续和的异或值。 输入输出格式 输入格式: 第一行输入一个n,表示这序列的数序列 第二行输入n个数字a1,a2...an代表这个序列 0<=a1,a2,...an,0<=a1+a2...+an<=10^6 输出格式: 输出这个序列所有的连续和的异或值 输入输出样例 输入样例#1: 复制 3 1 2 3 输出样例#1: 复制 0 说明 【样例解释】 序列1 2 3有6个连续和,它们分别是1 2 3 3 5 6,则1 xor 2 xor 3 xor 3 xor 5 xor 6 = 0 【数据范围】 对于20%的数据,1<=n<=100 对于100%的数据,1<=n <= 10^5 区间和转换成前缀和之差,树状数组分情况讨论即可。 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define rep(i,l,r) for (int i=l; i<=r; i+

BZOJ4849[Neerc2016]Mole Tunnels——模拟费用流+树形DP

微笑、不失礼 提交于 2020-05-04 04:30:50
题目描述 鼹鼠们在底下开凿了n个洞,由n-1条隧道连接,对于任意的i>1,第i个洞都会和第i/2(取下整)个洞间有一条隧 道,第i个洞内还有ci个食物能供最多ci只鼹鼠吃。一共有m只鼹鼠,第i只鼹鼠住在第pi个洞内,一天早晨,前k只 鼹鼠醒来了,而后n-k只鼹鼠均在睡觉,前k只鼹鼠就开始觅食,最终他们都会到达某一个洞,使得所有洞的ci均大 于等于该洞内醒着的鼹鼠个数,而且要求鼹鼠行动路径总长度最小。现对于所有的1<=k<=m,输出最小的鼹鼠行动 路径的总长度,保证一定存在某种合法方案。 输入 第一行两个数n,m(1<=n,m<=100000),表示有n个洞,m只鼹鼠。 第二行n个整数ci表示第i个洞的食物数。 第三行m个整数pi表示第i只鼹鼠所在洞pi。 输出 输出一行m个整数,第i个整数表示当k=i时最小的鼹鼠行动路径总长度。 样例输入 5 4 0 0 4 1 1 2 4 5 2 样例输出 1 1 2 4 首先考虑建出费用流模型:源点向每个点连边,容量为初始在这个点的鼹鼠数,费用为$0$;每个点向汇点连边,容量为$c_{i}$,费用为$0$,原图有通道的点之间互相连边,容量为$INF$,费用为$1$。每次从给定点(即将源点到一个点的容量$+1$)出发找到一条最短路并将路径上的边建出容量为$1$,费用为$-1$的反向边。这样做显然会$TLE$,我们考虑这个图的特殊性质

18.06.30 POJ NOI4975:两只鼹鼠

冷暖自知 提交于 2020-05-04 04:30:36
描述 一个圆形花圃被分为k个扇形区域(0,1,…,k-1)。有两只小鼹鼠A,B分别位于其中的两个区域。鼹鼠从一个扇形区域移动到相邻的区域需要1分钟。已知A鼹鼠总是沿顺时针方向移动(序号增大),B鼹鼠总是沿逆时针方向移动(序号减小),两只鼹鼠都是每隔一段时间钻出地面一次。请你求出两只鼹鼠第一次同时在同一个扇形区域钻出地面的时间。如果永远遇不到,则输出“no answer”。 输入 第一行为一个整数k,表示扇形区域的个数。1 <= k< = 10000 第二行为两个整数la,lb分别表示两只鼹鼠初始时所处的位置。0 <= la, lb < k。 第三行为两个整数ia,ib分别为两只鼹鼠钻出地面的间隔时间。0 < ia, ib < 100。 第四行为两个整数fa,fb分别为两只鼹鼠第一次钻出地面的时间。0 <= fa < ia, 0 <= fb < ib。 输出 用一个整数表示两只鼹鼠第一次同时在同一个扇形区域钻出地面的时间。 若两只鼹鼠永远无法相遇,输出“no answer”。 样例输入 7 1 5 3 5 1 2 样例输出 37 1 #include <cstdio> 2 #include <cstring> 3 #include <memory.h> 4 #include <algorithm> 5 #include <stdlib.h> 6 #include <math.h> 7

bzoj1211: [HNOI2004]树的计数(prufer序列+组合数学)

安稳与你 提交于 2020-05-04 04:30:19
1211: [HNOI2004]树的计数 题目: 传送门 题解:    今天刚学prufer序列,先打几道简单题    首先我们知道prufer序列和一颗无根树是一一对应的,那么对于任意一个节点,假设这个节点的度数为k,那么在prufer序列里面这个节点就会出现k-1次    (反过来也同理成立)    那么具体的原因 这里 有解释:    对于任意一个节点在prufer序列里出现一次的话,那么就表示我有一个孩子被删了,那么少了的一次去哪里了呢,因为每次加进去的都是父亲节点,那么少的肯定就是我自己连出去的一条边啊...       知道了这个推论之后,这道题就很简单了:    题目要求的树必须满足度数的要求,那只要这棵树的prufer序列满足度数要求就ok了啊...    这样我们就可以用组合数学,直接根据给出的d数组做。    很容易想到:ans=(n-2)!/(d1-1)!*(d2-1)!....(dn-1)! (如果是入度小于二的话不用计算)    刚开始傻逼比的打全排列...有重复啊啊啊啊!!!    最后一点:题目保证方案数不会超过10^17,那long long 肯定没问题啊...可是我们求得是组合,是有除法的(也就是说乘法的时候还是会爆)....ORT那就质因数分解咯... 代码: 1 #include<cstdio> 2 #include<cstring> 3

string标准C++中的的用法总结(转)

跟風遠走 提交于 2020-05-04 03:37:44
转自: http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用。但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯定的。也许有人会说,即使不用MFC框架,也可以想办法使用MFC中的API,具体的操作方法在本文最后给出操作方法。其实,可能很多人很可能会忽略掉标准C++中string类的使用。标准C++中提供的string类得功能也是非常强大的,一般都能满足我们开发项目时使用。现将具体用法的一部分罗列如下,只起一个抛砖引玉的作用吧,好了,废话少说,直接进入正题吧! 要想使用标准C++中string类,必须要包含 #include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件 using std::string; using std::wstring; 或 using namespace std; 下面你就可以使用string/wstring了,它们两分别对应着char和wchar_t。 string和wstring的用法是一样的,以下只用string作介绍: 构造函数(Constructors) 语法:

洛谷P2421 [NOI2002]荒岛野人(扩展欧几里得)

断了今生、忘了曾经 提交于 2020-05-04 03:22:10
题目背景 原 A-B数对(增强版)参见P1102 题目描述 克里特岛以野人群居而著称。岛上有排列成环行的M个山洞。这些山洞顺时针编号为1,2,…,M。岛上住着N个野人,一开始依次住在山洞C1,C2,…,CN中,以后每年,第i个野人会沿顺时针向前走Pi个洞住下来。 每个野人i有一个寿命值Li,即生存的年数。 下面四幅图描述了一个有6个山洞,住有三个野人的岛上前四年的情况。三个野人初始的洞穴编号依次为1,2,3;每年要走过的洞穴数依次为3,7,2;寿命值依次为4,3,1。 奇怪的是,虽然野人有很多,但没有任何两个野人在有生之年处在同一个山洞中,使得小岛一直保持和平与宁静,这让科学家们很是惊奇。他们想知道,至少有多少个山洞,才能维持岛上的和平呢? 输入输出格式 输入格式: 第1行为一个整数N(1<=N<=15),即野人的数目。 第2行到第N+1每行为三个整数Ci, Pi, Li (1<=Ci,Pi<=100, 0<=Li<=106 ),表示每个野人所住的初始洞穴编号,每年走过的洞穴数及寿命值。 输出格式: 仅包含一个数M,即最少可能的山洞数。输入数据保证有解,且M不大于10^6。 输入输出样例 输入样例#1: 复制 3 1 3 4 2 7 3 3 2 1 输出样例#1: 复制 6 说明 对于50% 的数据:N 的范围是[1…1,000]。 对于另外50% 的数据:N 的范围是[1…100

hihocoder 1457 后缀自动机四·重复旋律7 求不同子串的和

两盒软妹~` 提交于 2020-05-04 00:31:01
描述 小Hi平时的一大兴趣爱好就是演奏钢琴。我们知道一段音乐旋律可以被表示为一段数构成的数列。 神奇的是小Hi发现了一部名字叫《十进制进行曲大全》的作品集,顾名思义,这部作品集里有许多作品,但是所有的作品有一个共同特征:只用了十个音符,所有的音符都表示成0-9的数字。 现在小Hi想知道这部作品中所有不同的旋律的“和”(也就是把串看成数字,在十进制下的求和,允许有前导0)。答案有可能很大,我们需要对(10^9 + 7)取摸。 解题方法提示 × 解题方法提示 小Hi:我们已经学习了后缀自动机,今天我们再来看这道有意思的题。 小Ho:好!这道题目让我们求的是若干的数字串所有不同子串的和。 小Hi:你能不能结合后缀自动机的性质来思考如何解决本题? 小Ho:这道题目既然是关于子串,那么我知道从后缀自动机的所有状态中包含的子串的集合恰好对应原串的所有不重复子串。 小Hi:很好。那你可以先简化问题,想想只有一个串怎么做? 小Ho:好的。这个难不倒我。我上次已经知道如何计算一个串所有不同子串的数量,现在这题也类似,只不过计算更加复杂一点。 小Hi:那你可以详细说说。 小Ho:我们举个例子,假设S="1122124",其实就是我们熟悉的例子"aabbabd"啦。 状态 子串 endpos sum S 空串 0 1 1 {1,2,5} 1 2 11 {2} 11 3 112 {3} 112 4

hihoCoder #1457 : 后缀自动机四·重复旋律7(后缀自动机 + 拓扑排序)

断了今生、忘了曾经 提交于 2020-05-04 00:30:37
http://hihocoder.com/problemset/problem/1457 val[i] 表示状态i所表示的所有字符串的十进制之和 ans= ∑ val[i] 在后缀自动机上,从起始状态走任意一条路径到达任意一个状态,这条路径上的字符就是到达的状态的字符串之一 所以利用拓扑排序,记录从起始状态 走到这个状态的 路径数,即这个状态的字符串个数 sum 若后缀自动机上有边u-->v,加的是数字m,sum[v]+=sum[u],val[v]+=val[u]*10+sum[u]*m 至于多个串,中间加特殊字符,拓扑排序的时候不走特殊字符边即可 #include<cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int mod=1e9+ 7 ; #define N 2000001 int tot= 1 ,ch[N<< 2 ][ 11 ]; int fa[N<< 1 ],len[N<< 1 ]; int dep[N<< 1 ]; int last= 1 ,p,q,np,nq; char s[N]; int v[N<< 1 ]; int sa[N<< 1 ]; int sum[N<< 1 ],val[N<< 1 ]; void extend(