[2020-11-24 contest]糖果机器(二维偏序),手套(状压dp),甲虫(区间dp),选举(线段树 最大子段和)

文章目录

  • T1:糖果机器
    • solution
    • code
  • T2:手套
    • solution
    • code
  • T3:甲虫
    • solution
    • code
  • T4:选举
    • solution
    • code

T1:糖果机器

solution

考虑从第iii个糖果出发能到达第jjj个,则有Tj−Ti≥∣Sj−Si∣T_j-T_i≥|S_j-S_i|TjTiSjSi
{Tj−Ti≥Sj−SiTj−Ti≥Si−Sj=>{Ti+Si≥Tj+SjTi−Si≥Tj−Sj\left\{ \begin{aligned} T_j-T_i≥S_j-S_i \\ T_j-T_i≥S_i-S_j\\ \end{aligned} \right.=>\left\{ \begin{aligned} T_i+S_i\ge T_j+S_j\\ T_i-S_i\ge T_j-S_j\\ \end{aligned} \right.{TjTiSjSiTjTiSiSj=>{Ti+SiTj+SjTiSiTjSj
发现这其实是函数同构体
在这里插入图片描述

A=Ti+Si,B=Ti−SiA=T_i+S_i,B=T_i-S_iA=Ti+Si,B=TiSi,则👆可转化为👇
{Ai≥AjBi≥Bj\left\{ \begin{aligned} A_i\ge A_j\\ B_i\ge B_j\\ \end{aligned} \right.{AiAjBiBj
又发现此题就是一个二维偏序问题
其实就是noip普及组1999导弹拦截
在这里插入图片描述

二维偏序问题,一般是一维时间轴有序,然后二维套树状数组,总体上复杂度是logloglog级别

code

#include <set>
#include <cstdio>
#include <algorithm>
using namespace std;
#define maxn 100005
struct node {int s, t, id;friend bool operator < ( const node &x, const node &y ) {return x.s + x.t < y.s + y.t;}
}p[maxn];
set < node > st;
int n, tot;bool cmp( node x, node y ) {return ( x.t - x.s == y.t - y.s ) ? ( x.t + x.s < y.t + y.s ) : ( x.t - x.s < y.t - y.s );
}int main() {scanf( "%d", &n );for( int i = 1;i <= n;i ++ )scanf( "%d %d", &p[i].s, &p[i].t );sort( p + 1, p + n + 1, cmp );for( int i = 1;i <= n;i ++ ) {set < node > :: iterator it = st.upper_bound( p[i] );if( it == st.begin() ) p[i].id = ++ tot;else it --, p[i].id = it->id, st.erase( it );st.insert( p[i] );}printf( "%d\n", tot );for( int i = 1;i <= n;i ++ )printf( "%d %d %d\n", p[i].s, p[i].t, p[i].id );return 0;
}

T2:手套

solution

在这里插入图片描述

code

#include <cstdio>
#include <algorithm>
using namespace std;
#define maxn 20
struct node {int x, y;
}p[1 << maxn];
int n;
int a[maxn], b[maxn];bool cmp( node s, node t ) {return ( s.x == t.x ) ? ( s.y > t.y ) : ( s.x < t.x );
}void update( long long &ansx, long long &ansy, long long x, long long y ) {if( ( x + y < ansx + ansy ) || ( x + y == ansx + ansy && x < ansx ) )ansx = x, ansy = y;
}int main() {scanf( "%d", &n );for( int i = 0;i < n;i ++ )scanf( "%d", &a[i] );for( int i = 0;i < n;i ++ )scanf( "%d", &b[i] );int m = 1 << n;for( int i = 0;i < m;i ++ )for( int j = 0;j < n;j ++ )if( i >> j & 1 ) p[i].x += a[j];for( int i = 0;i < m;i ++ )for( int j = 0;j < n;j ++ )if( i >> j & 1 ) p[m - 1 - i].y += b[j];long long flagx = p[m - 1].x, flagy = p[0].y, ansx = flagx, ansy = flagy;sort( p, p + m, cmp );for( int i = m - 1, y = 0;~ i;i -- ) {if( p[i].x != flagx && y != flagy )update( ansx, ansy, p[i].x + 1, y + 1 );y = max( p[i].y, y );}printf( "%lld\n%lld\n", ansx, ansy );return 0;
}

T3:甲虫

solution

区间dp还是一眼就看得出来,只不过不知道怎么处理时间问题,考场上错误代码都能骗40
在这里插入图片描述
正着不行,就反着考虑

code

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define maxn 305
#define ll long long
#define inf 0x3f3f3f3f
int n, m, k;
int x[maxn];
ll dp[2][maxn][maxn];
int vis[2][maxn][maxn];long long dfs( int t, int l, int r ) {if( r - l == k ) return 0;if( vis[t][l][r] == k ) return dp[t][l][r];vis[t][l][r] = k;int p = ( t ? r : l );ll &ans = dp[t][l][r];ans = inf;if( l != 1 ) ans = min( ans, dfs( 0, l - 1, r ) + ( x[p] - x[l - 1] ) * ( k - ( r - l ) ) );if( r != n ) ans = min( ans, dfs( 1, l, r + 1 ) + ( x[r + 1] - x[p] ) * ( k - ( r - l ) ) );return ans;
}int main() {scanf( "%d %d", &n, &m );for( int i = 1;i <= n;i ++ )scanf( "%d", &x[i] );x[++ n] = 0;sort( x + 1, x + n + 1 );int pos;for( int i = 1;i <= n;i ++ )if( ! x[i] ) { pos = i; break; }ll ans = 0;for( k = 0;k < n;k ++ )ans = max( ans, 1ll * m * k - dfs( 0, pos, pos ) );printf( "%lld", ans );return 0;
}

T4:选举

solution

在这里插入图片描述

在这里插入图片描述

code

#include <cstdio>
#include <iostream>
using namespace std;
#define maxn 500005
struct node {int minn, maxx, ans;node() {}node( int Min, int Max, int Ans ) {minn = Min, maxx = Max, ans = Ans;}friend node operator + ( const node &x, const node &y ) {return node( min( x.minn, y.minn ), max( x.maxx, y.maxx ), max( y.maxx - x.minn, max( x.ans, y.ans ) ) );}
}t[maxn << 2];
int n, Q;
char s[maxn];
int pre[maxn];void build( int num, int l, int r ) {if( l == r ) {t[num] = node( pre[l], pre[l], 0 );return;}int mid = ( l + r ) >> 1;build( num << 1, l, mid ), build( num << 1 | 1, mid + 1, r );t[num] = t[num << 1] + t[num << 1 | 1];
}node query( int num, int l, int r, int L, int R ) {if( L <= l && r <= R ) return t[num];int mid = ( l + r ) >> 1;if( R <= mid ) return query( num << 1, l, mid, L, R );else if( mid < L ) return query( num << 1 | 1, mid + 1, r, L, R );else return query( num << 1, l, mid, L, R ) + query( num << 1 | 1, mid + 1, r, L, R );
}int main() {scanf( "%d %s %d", &n, s + 1, &Q );for( int i = 1;i <= n;i ++ )pre[i] = pre[i - 1] + ( s[i] == 'T' ? -1 : 1 );build( 1, 0, n );	while( Q -- ) {int l, r;scanf( "%d %d", &l, &r );node ans = query( 1, 0, n, l - 1, r );printf( "%d\n", ans.ans - ( pre[r] - pre[l - 1] ) );}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模板:树上启发式合并(dsu on tree)

文章目录解析step1&#xff1a;树剖step2&#xff1a;求出轻儿子的答案&#xff08;不继承&#xff09;step3&#xff1a;求出重儿子的答案&#xff08;继承&#xff09;step4&#xff1a;加入自己的答案、合并轻儿子的答案并记录答案step5&#xff1a;清空复杂度分析代码所谓树…

New Maths

New Maths 题意&#xff1a; 定义一个不进位的乘法运算 ⊗&#xff0c;先给出一个n&#xff0c;判断是否存在a&#xff0c;满足a ⊗ a n n的长度最多是25 题解&#xff1a; 17 * 17正常等于289 17 ⊗ 17 149 如果a的长度为x&#xff0c;那么最后得到的n的长度len是2x-1 倒…

CF827F-Dirty Arkady‘s Kitchen【堆】

正题 题目链接:https://www.luogu.com.cn/problem/CF827F 题目大意 给出nnn个点mmm条边的一张无向图&#xff0c;每条边只有在时刻[li,ri)[l_i,r_i)[li​,ri​)时候才能通过&#xff0c;且通过时间为111&#xff0c;你不能在一个点处停留&#xff0c;求111走到nnn的最短时间。…

linux一些好用的命令和快捷键

以后知道了再加吧 ctrl-alt-T&#xff1a;yjx之殇 快捷键 ctrl-x h&#xff1a;全选 ctrl-x 3&#xff1a;左右分栏 ctrl-x 1&#xff1a;还原1栏 ctrl-s&#xff1a;查找 alt-%&#xff1a;替换 配置 ctrl-xctrl-f :~/.emacs: (global-set-key (kbd “C-a”) mark-whole-buffe…

ASP.NET Core 数据加解密的一些坑

点击蓝字关注我ASP.NET Core 给我们提供了自带的Data Protection机制&#xff0c;用于敏感数据加解密&#xff0c;带来方便的同时也有一些限制可能引发问题&#xff0c;这几天我就被狠狠爆了一把我的场景我的博客系统有个发送邮件通知的功能&#xff0c;因此需要配置一个邮箱账…

[2020-11-28 contest]素数(数学),精灵(区间dp),农夫约的假期(结论),观察(树链剖分lca+set)

文章目录素数solutioncode精灵solutioncode农夫约的假期solutioncode观察solutionsolutioncode素数 solution 通过观察可得一个结论 对于两个相邻的质数p1,p2(p1<p2)p_1,p_2\ (p_1<p_2)p1​,p2​ (p1​<p2​) 对于x∈[p1,p2)x∈[p_1,p_2)x∈[p1​,p2​)&#xff0c;都…

B. Box Fitting

B. Box Fitting 题意&#xff1a; 现在有n个长方形&#xff0c;宽均为1&#xff0c;现在有一个底为m的容器&#xff0c;问将长方形放入其中&#xff0c;所用容器的最小宽度是多少 &#xff08;长方形必须长朝下放置详细如图&#xff09; 题解&#xff1a; 比赛时脑子抽了。…

AT2371-[AGC013E]Placing Squares【矩阵乘法】

正题 题目链接:https://www.luogu.com.cn/problem/AT2371 题目大意 给出nnn和mmm个数bbb。 求所有满足以下要求的序列aaa 和为nnn对于所有bib_ibi​不存在任何一个前缀和为bib_ibi​。 一个序列的贡献为所有数的二次方和&#xff0c;求所有合法序列的贡献。 1≤n≤109,1≤m…

博客搬迁通知

地址 CSDN 上所有博客由于更新困难的问题&#xff0c;已经全部搬迁到 我的博客园&#xff0c;如果您发现博客有许多缺失部分&#xff0c;请到 cnblogs 上查看&#xff0c;谢谢&#xff01;

洛谷P1074:靶形数独(搜索、剪枝)

解析 搜索题都是玄学 本题暴搜人人都会写&#xff0c;关键是如何剪枝 我一直在最优性剪枝上纠结qwq 但仔细想想&#xff0c;不同方案的权值差别没有那么大 再加上剪枝时不可避免的要放弃一些准确度 所以最优性剪枝在本题可能确实没有太大的作用 考虑我们平时如何玩数独 肯定是…

人工智能第六课:如何做研究

这是我学习 Data Science Research Methods 这门课程的笔记。这门课程的讲师是一名教授和数据科学家&#xff0c;可能因为他既有理论背景&#xff0c;又有实践经验&#xff0c;所以整个课程听下来还比较舒服&#xff0c;学到了一些不错的理论知识。这门课比较系统地介绍了什么…

CF889E-Mod Mod Mod【dp】

正题 题目链接:https://www.luogu.com.cn/problem/CF889E 题目大意 给出一个长度为nnn的序列aaa&#xff0c;定义函数f(i,x)f(i,x)f(i,x)有 f(n,x)xmodanf(n,x)x\bmod a_nf(n,x)xmodan​ f(i,x)(xmodai)f(xmodai)(i<n)f(i,x)(x\bmod a_i)f(x\bmod a_i)(i<n)f(i,x)(xmod…

[2020-11-30 contest]数列(矩阵加速),秘密通道(dijkstra最短路)小X游世界树(换根dp),划分(数学)

文章目录数列solutioncode秘密通道solutioncode小X游世界树solutioncode划分solutioncode数列 a[1]a[2]a[3]1 a[x]a[x-3]a[x-1] (x>3) 求 a 数列的第 n 项对 1000000007&#xff08;10^97&#xff09;取余的值。 输入格式 第一行一个整数 T&#xff0c;表示询问个数。 以下…

动态区间第k小:树状数组套权值线段树

所谓树状数组套权值线段树&#xff0c;就是在树状树组上套权值线段树 &#xff08;逃&#xff09; 解析 如何解决静态区间第k小&#xff1f; 使用主席树就ok啦 辣么如何解决动态区间第k小嘞… 我们想想主席树为啥不能解决动态区间第k小 因为如果改了一个点的值&#xff0c;…

Docker最全教程——数据库容器化之持久保存数据(十二)

上一节我们讲述了SQL Server容器化实践&#xff08;注意&#xff0c;SQL Server现在也支持跨平台&#xff09;&#xff0c;本节将讲述如何持久保存数据&#xff0c;并且接下来将逐步讲解其他数据库&#xff08;MySql、Redis、Mongodb等等&#xff09;的容器化实践&#xff0c;中…

AT2064-[AGC005F]Many Easy Problems【NTT】

正题 题目链接:https://www.luogu.com.cn/problem/AT2064 题目大意 给出nnn个点的一棵树&#xff0c;对于k∈[1,n]k\in[1,n]k∈[1,n]求出所有kkk个点的点集的构出的虚树大小和。 1≤n≤21051\leq n\leq 2\times 10^51≤n≤2105 解题思路 考虑每个点的贡献&#xff0c;一个点…

【李超树】李超线段树维护凸包(凸壳) (例题:blue mary开公司+线段游戏+ZZH的旅行)

文章目录前言李超树引入(斜率优化)什么是李超树&#xff1f;李超树活着能干点什么&#xff1f;算法思想(使用手册&#xff1f;)插入查询模板判断是否覆盖(优不优)插入查询例题板题&#xff1a;BlueMary开公司分析code线段游戏分析code拓展——(动态开点李超树维护凸包)ZZH的旅行…

L3-2 至多删三个字符

L3-2 至多删三个字符 题意&#xff1a; 给定一个全部由小写英文字母组成的字符串&#xff0c;允许你至多删掉其中 3 个字符&#xff0c;结果可能有多少种不同的字符串&#xff1f; 题解&#xff1a; 最不擅长dp 我们设dp[i][j]表示前i里面删除j个有多少种方法 第i个删除或者…

2021CSP:游记

前言 没做出别人做不出的题 却犯了别人不会犯的错 考场 先遍历 T1感觉似乎很水的样子 T2这甚么东西… T3似乎有的一搞 T4网络流模板可以拿40 &#xff08;然而由于某次模拟悲伤的前车之鉴并不想为这点分写又臭又长的dinic…&#xff09; 先开T1 一开始直觉想三分水过去 但分析…

老牌开源Office操作组件NPOI现已支持.NET Core

昨天在微信群里听到老牌Excel开发利器NPOI的作者瞿总说4.6.1版本的NPOI已经支持.NET Standard 2.0了&#xff0c;这也就意味着你可以在.NET Core中使用NPOI了。作者&#xff1a;依乐祝原文地址 &#xff1a;https://www.cnblogs.com/yilezhu/p/10269281.html写在前面曾经的.NET…