cstring

bzoj:4241: 历史研究

安稳与你 提交于 2020-04-19 23:10:44
Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记。JOI教授为了通过这份日记来研究古代IOI国的生活,开始着手调查日记中记载的事件。 日记中记录了连续N天发生的时间,大约每天发生一件。 事件有种类之分。第i天(1<=i<=N)发生的事件的种类用一个整数Xi表示,Xi越大,事件的规模就越大。 JOI教授决定用如下的方法分析这些日记: 1. 选择日记中连续的一些天作为分析的时间段 2. 事件种类t的重要度为t*(这段时间内重要度为t的事件数) 3. 计算出所有事件种类的重要度,输出其中的最大值 现在你被要求制作一个帮助教授分析的程序,每次给出分析的区间,你需要输出重要度的最大值。 Input 第一行两个空格分隔的整数N和Q,表示日记一共记录了N天,询问有Q次。 接下来一行N个空格分隔的整数X1...XN,Xi表示第i天发生的事件的种类 接下来Q行,第i行(1<=i<=Q)有两个空格分隔整数Ai和Bi,表示第i次询问的区间为[Ai,Bi]。 Output 输出Q行,第i行(1<=i<=Q)一个整数,表示第i次询问的最大重要度 Sample Input 5 5 9 8 7 8 9 1 2 3 4 4 4 1 4 2 4 Sample Output 9 8 8 16 16 HINT 1<=N<=10^5 1<=Q<=10^5

2020年04月12日个人赛

被刻印的时光 ゝ 提交于 2020-04-19 11:46:53
A - Balloons 题意:本题的题意比较简单,简单说就是分数字,使得A得到的数字之和大于B得到的数字之和,然后输出分给A的数字的下标。 题解:要注意特判n==1和n==2的情况,属于签到题。 代码: #include<iostream> #include <algorithm> #include <cstring> #include <cmath> #define ll long long using namespace std; int main() { int n; cin >> n; int num[ 20 ]= { 0 }; int sum= 0 ; for ( int i= 1 ; i<=n; i++ ) { cin >> num[i]; sum =sum+num[i]; // 总数 } if (n== 1 ) { cout <<- 1 << endl; } else if (n== 2 ) { if (num[ 1 ]==num[ 2 ]) { cout <<- 1 << endl; } else { cout << 1 << endl; cout << 1 << endl; } } else { // 大于等于 3 int su= 0 ; int i; int f= 0 ; for (i= 1 ; i<=n; i++ ) { su =su+ num[i];

CF1324E(树形dp)

你离开我真会死。 提交于 2020-04-19 07:45:33
Maximum White Subtree 思路:我们假设节点1为root,如果我们知道了root所有子树的最优情况,那么我们可以把1节点的最优情况传递给它的所有子树(当然如果传递给如图2的子树,那么需要把以2为root的最优贡献给减去,再传递root[1]的最优价值)。那我们这么维护子树的最优情况?很显然,如果子树的价值是负数,那么子树给父结点的价值应该是0,如果是正数,则可以把这个价值传递给父结点。 1 #include <iostream> 2 #include <deque> 3 #include <algorithm> 4 #include <stack> 5 #include <vector> 6 #include <cstring> 7 8 using namespace std; 9 10 const int N = 2e5 + 10 ; 11 12 struct Tree{ 13 int cnt; 14 bool white; 15 }tree[N]; 16 struct Edge{ 17 int to, nxt; 18 }e[N << 1 ]; 19 int head[N]; 20 int n, tot; 21 22 inline void add( int u, int v){ 23 e[tot].to = v; e[tot].nxt = head[u];

CF1337C(基础树形dp)

喜夏-厌秋 提交于 2020-04-19 00:22:23
Linova and Kingdom 思路:我们可以很容易想到,最深的点可能是我们需要的点,我们选点都是从最深点考虑,但有种情况是,在最优的情况, 我们选择了一个点建立工厂,这个点有两个儿子点,那这两个儿子也一定是工厂,这两个儿子工厂的价值会因为父亲节点建立了工厂随之减去1,这是难点,我们只需要把两个儿子的代价转移,保持两个儿子点的价值,把要失去的价值给父亲结点,就是父亲结点的价值减去两个儿子失去的价值2,这样维护每个节点价值,sort一下,选择前K个即可。 1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 #include <cstdio> 5 #include <vector> 6 7 using namespace std; 8 9 #define fi first 10 #define se second 11 #define ll long long 12 #define pb push_back 13 14 const int N = ( int )2e5 + 10 ; 15 struct Tree{ 16 int depth; 17 int son; 18 int value; 19 void cal(){ 20 value = depth - son; 21 } 22 bool

CF1324E(树形dp)

和自甴很熟 提交于 2020-04-19 00:20:25
Maximum White Subtree 思路:我们假设节点1为root,如果我们知道了root所有子树的最优情况,那么我们可以把1节点的最优情况传递给它的所有子树(当然如果传递给如图2的子树,那么需要把以2为root的最优贡献给减去,再传递root[1]的最优价值)。那我们这么维护子树的最优情况?很显然,如果子树的价值是负数,那么子树给父结点的价值应该是0,如果是正数,则可以把这个价值传递给父结点。 1 #include <iostream> 2 #include <deque> 3 #include <algorithm> 4 #include <stack> 5 #include <vector> 6 #include <cstring> 7 8 using namespace std; 9 10 const int N = 2e5 + 10 ; 11 12 struct Tree{ 13 int cnt; 14 bool white; 15 }tree[N]; 16 struct Edge{ 17 int to, nxt; 18 }e[N << 1 ]; 19 int head[N]; 20 int n, tot; 21 22 inline void add( int u, int v){ 23 e[tot].to = v; e[tot].nxt = head[u];

CF1337C(基础树形dp)

风流意气都作罢 提交于 2020-04-18 23:33:40
Linova and Kingdom 思路:我们可以很容易想到,最深的点可能是我们需要的点,我们选点都是从最深点考虑,但有种情况是,在最优的情况, 我们选择了一个点建立工厂,这个点有两个儿子点,那这两个儿子也一定是工厂,这两个儿子工厂的价值会因为父亲节点建立了工厂随之减去1,这是难点,我们只需要把两个儿子的代价转移,保持两个儿子点的价值,把要失去的价值给父亲结点,就是父亲结点的价值减去两个儿子失去的价值2,这样维护每个节点价值,sort一下,选择前K个即可。 1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 #include <cstdio> 5 #include <vector> 6 7 using namespace std; 8 9 #define fi first 10 #define se second 11 #define ll long long 12 #define pb push_back 13 14 const int N = ( int )2e5 + 10 ; 15 struct Tree{ 16 int depth; 17 int son; 18 int value; 19 void cal(){ 20 value = depth - son; 21 } 22 bool

第七届蓝桥杯大赛个人赛决赛(软件类C语言B组)第一题:一步之遥

醉酒当歌 提交于 2020-04-17 21:35:54
这题好多人用爆搜/bfs来做,然而这题可用exgcd(扩展欧几里得)做,而且很简便。 先附原题: 一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里。 矿车停在平直的废弃的轨道上。 他的面前是两个按钮,分别写着“F”和“B”。 小明突然记起来,这两个按钮可以控制矿车在轨道上前进和后退。 按F,会前进97米。按B会后退127米。 透过昏暗的灯光,小明看到自己前方1米远正好有个监控探头。 他必须设法使得矿车正好停在摄像头的下方,才有机会争取同伴的援助。 或许,通过多次操作F和B可以办到。 矿车上的动力已经不太足,黄色的警示灯在默默闪烁… 每次进行 F 或 B 操作都会消耗一定的能量。 小明飞快地计算,至少要多少次操作,才能把矿车准确地停在前方1米远的地方。 请填写为了达成目标,最少需要操作的次数。 注意,需要提交的是一个整数,不要填写任何无关内容(比如:解释说明等) 【答案】97 // 法一:笔算(用数论exgcd的方法) ax + by = 1 根据题意知 a = 97 , b = - 127 按如下方式列出等式: - 127 = - 1 * 97 - 30 97 = - 3 * (- 30 ) + 7 - 30 = - 4 * 7 - 2 7 = - 3 * (- 2 ) + 1 - 2 = 1 * (- 2 ) + 0 然后依照上面的式子开始整理,用含有a,

Level Up

拟墨画扇 提交于 2020-04-16 08:38:42
【推荐阅读】微服务还能火多久?>>> 题意:Steve玩魔兽世界要做任务升两级,任务在你不同的等级给的经验不同,输入任务数量和升第一级和升第二级需要的经验,接着输入每个任务第一级完成给的经验和花费的时间、第二级级完成给的经验和花费的时间。求要升两级最少要花多少时间,如果不能则输出-1。 题解: 由题目数据可以直接想到用动态规划来做,因为最多需要的经验只有五百,因此可以开DP[I][J][K](记得开为long long,INF也得更换,我因为这个卡了很久),i代表第一级的经验,J代表第二级的经验,K代表第几个任务。具体见代码注释。 #define _CRT_SECURE_NO_DepRECATE #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <iostream> #include <cmath> #include <iomanip> #include < string > #include <algorithm> #include <bitset> #include <cstdlib> #include <cctype> #include <iterator> #include <vector> #include <cstring> #include <cassert> #include <map>

Level Up

删除回忆录丶 提交于 2020-04-16 08:36:39
【推荐阅读】微服务还能火多久?>>> 题意:Steve玩魔兽世界要做任务升两级,任务在你不同的等级给的经验不同,输入任务数量和升第一级和升第二级需要的经验,接着输入每个任务第一级完成给的经验和花费的时间、第二级级完成给的经验和花费的时间。求要升两级最少要花多少时间,如果不能则输出-1。 题解: 由题目数据可以直接想到用动态规划来做,因为最多需要的经验只有五百,因此可以开DP[I][J][K](记得开为long long,INF也得更换,我因为这个卡了很久),i代表第一级的经验,J代表第二级的经验,K代表第几个任务。具体见代码注释。 #define _CRT_SECURE_NO_DepRECATE #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <iostream> #include <cmath> #include <iomanip> #include < string > #include <algorithm> #include <bitset> #include <cstdlib> #include <cctype> #include <iterator> #include <vector> #include <cstring> #include <cassert> #include <map>

Level Up

久未见 提交于 2020-04-16 08:18:56
【推荐阅读】微服务还能火多久?>>> 题意:Steve玩魔兽世界要做任务升两级,任务在你不同的等级给的经验不同,输入任务数量和升第一级和升第二级需要的经验,接着输入每个任务第一级完成给的经验和花费的时间、第二级级完成给的经验和花费的时间。求要升两级最少要花多少时间,如果不能则输出-1。 题解: 由题目数据可以直接想到用动态规划来做,因为最多需要的经验只有五百,因此可以开DP[I][J][K](记得开为long long,INF也得更换,我因为这个卡了很久),i代表第一级的经验,J代表第二级的经验,K代表第几个任务。具体见代码注释。 #define _CRT_SECURE_NO_DepRECATE #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <iostream> #include <cmath> #include <iomanip> #include < string > #include <algorithm> #include <bitset> #include <cstdlib> #include <cctype> #include <iterator> #include <vector> #include <cstring> #include <cassert> #include <map>