牛客练习赛 59

A.小乔和小灰灰

前几天刚刚学了序列自动机,这题直接也没咋想暴力的做法,直接上序列自动机匹配子序列即可。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1010;
char s[N];
int ne[N][110],n;
char p1[]="XiaoQiao";
char p2[]="XiaoHuiHui";
void build()
{for(int i=n;i;i--){for(int j=0;j<100;j++)ne[i-1][j]=ne[i][j];ne[i-1][s[i]-'A']=i;}
}
int main()
{IO;int T=1;//cin>>T;while(T--){cin>>s+1;n=strlen(s+1);build();bool ok1=1,ok2=1;for(int i=0,now=0;i<8;i++){now=ne[now][p1[i]-'A'];if(!now) {ok1=0;break;}}for(int i=0,now=0;i<10;i++){now=ne[now][p2[i]-'A'];if(!now) {ok2=0;break;}}if(ok1&&ok2) cout<<"Happy\n";else cout<<"emm\n";}return 0;
}

B.牛能和小镇

∣xi2yi−xj2yj+yi2(yi−2xi)−yj2(yj−2xj)∣|x_i^2y_i-x_j^2y_j+y_i^2(y_i-2x_i)-y_j^2(y_j-2x_j)|xi2yixj2yj+yi2(yi2xi)yj2(yj2xj)
不难发现这个式子iiijjj之间的坐标没有任何相关性我们做一步转化
∣xi2yi+yi2(yi−2xi)−(xj2yj+yj2(yj−2xj))∣|x_i^2y_i+y_i^2(y_i-2x_i)-(x_j^2y_j+y_j^2(y_j-2x_j))|xi2yi+yi2(yi2xi)(xj2yj+yj2(yj2xj))
发现要把每个点用一个坐标表示即可xi2yi+yi2(yi−2xi)x_i^2y_i+y_i^2(y_i-2x_i)xi2yi+yi2(yi2xi),然后二维转化成一维数轴上的点,连接就非常容易了

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=100010;
ll p[N];
int n;
int main()
{IO;int T=1;//cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++){ll x,y;cin>>x>>y;p[i]=x*x*y+y*y*(y-2*x);}sort(p+1,p+1+n);cout<<p[n]-p[1]<<'\n';}return 0;
}

C.装备合成

典型数学题目,直接像做高中线性规划题做即可。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;
const int N=100010;
ll x,y;
bool check(ll a,ll b)
{return (2*a+4*b<=x)&&(3*a+b<=y);
}
int main()
{IO;int T=1;cin>>T;while(T--){cin>>x>>y;ll a=(4*y-x)/10;ll b=(3*x-2*y)/10;if(a>=0&&b>=0){ll res=0;if(check(a,b)) res=max(res,a+b);if(check(a,b+1)) res=max(res,a+b+1);if(check(a+1,b)) res=max(res,a+b+1);if(check(a,b-1)) res=max(res,a+b-1);if(check(a-1,b)) res=max(res,a+b-1);cout<<res<<'\n';}else if(a<0)cout<<min(x/4,y)<<'\n';else if(b<0) cout<<min(x/2,y/3)<<'\n';else cout<<0<<'\n';}return 0;
}

D.取石子游戏

暴力打表+总结规律+瞎胡搞
毕竟我也看不出啥规律啊~~

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;
const int N=100010;
ll sg[N];
ll dfs(ll u)
{if(sg[u]!=-1) return sg[u];if(u==1) return sg[u]=0;int a=dfs(u/2);int b=dfs((u+1)/2);for(int i=0;;i++)if(i!=a&&i!=b) return sg[u]=i;
}ll f[N],s[N];
int sz;
void init()
{f[1]=1;f[2]=2;s[1]=1;s[2]=3;for(int i=3;;i++){f[i]=f[i-1]+s[i-2];if(i%2==0) f[i]++;s[i]=f[i]+s[i-1];if(s[i]>=1e18){sz=i;break;}}
}
int main()
{IO;int T=1;cin>>T;//memset(sg,-1,sizeof sg);init();while(T--){ll n;cin>>n;int l=1,r=sz;while(l<r){int mid=l+r+1>>1;if(s[mid]<=n) l=mid;else r=mid-1;}if(s[l]<n) l++;if(l&1) cout<<"XiaoQiao\n";else cout<<"XiaoHuiHui\n";}// for(int i=1;i<=400;i++)//     if(dfs(i)) cout<<i<<": "<<1<<endl;//     else cout<<i<<": "<<0<<endl;return 0;
}

E.石子搬运

O(qn2logn)O(qn^2logn)O(qn2logn)
首先考虑如果没有修改操作,不难发现可以设计dp
状态表示:f(i,j)f_{(i,j)}f(i,j)表示考虑前iii堆石子,搬运jjj次能够搬完
状态转移:只需要考虑最后当前这堆石子搬运多少次能够将其搬完

由基本不等式可得,对于某一堆石子,搬运次数一定的,那么均分搬运石子代价一定最小。

如果考虑修改,我们用线段树维护,对于区间合并直接暴力合并即可O(n2)O(n^2)O(n2)
单点修改时间复杂度n2log(n)n^2log(n)n2log(n),总时间复杂度qn2log(n)qn^2log(n)qn2log(n)

// O(qn^2logn)
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=410;
const ll INF=0x3f3f3f3f3f3f3f3f;
int n,m,q;
ll a[N];
// ll f[N][N];
struct node
{int l,r;ll f[N];
}tree[N*4];
void pushup(int u)
{for(int i=1;i<=m;i++) tree[u].f[i]=INF;for(int i=1;i<=m;i++)for(int j=1;j<=m-i;j++){if(tree[u<<1].f[i]==INF||tree[u<<1|1].f[j]==INF) continue;tree[u].f[i+j]=min(tree[u].f[i+j],tree[u<<1].f[i]+tree[u<<1|1].f[j]);}
}
void build(int u,int l,int r)
{tree[u]={l,r};memset(tree[u].f,0x3f,8*N);if(l==r){for(int k=1;k<=min(m,(int)a[l]);k++){int x=a[l]/k;int p=a[l]%k;tree[u].f[k]=1ll*(x+1)*(x+1)*p+1ll*x*x*(k-p);}return;}int mid=l+r>>1;build(u<<1,l,mid);build(u<<1|1,mid+1,r);pushup(u);
}
void modify(int u,int pos,int val)
{if(tree[u].l==tree[u].r){for(int k=1;k<=min(m,val);k++){int x=val/k;int p=val%k;tree[u].f[k]=1ll*(x+1)*(x+1)*p+1ll*x*x*(k-p);}return;}int mid=tree[u].l+tree[u].r>>1;if(pos<=mid) modify(u<<1,pos,val);else modify(u<<1|1,pos,val);pushup(u);
}
int main()
{IO;int T=1;//cin>>T;while(T--){cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i];build(1,1,n);cin>>q;while(q--){int x,v;cin>>x>>v;modify(1,x,v);cout<<tree[1].f[m]<<'\n';}// 尝试没有修改用dp做法是否正确// memset(f,0x3f,sizeof f);// f[0][0]=0;// for(int i=1;i<=n;i++)//     for(int j=0;j<=m;j++)//         for(int k=1;k<=min(j,(int)a[i]);k++)//         {//             int x=a[i]/k;//             int p=a[i]%k;//             ll w=1ll*(a[i]/k+1)*(a[i]/k+1)*p+a[i]/k*a[i]/k*(k-p);//             f[i][j]=min(f[i][j],f[i-1][j-k]+w);//         }// cout<<f[n][m]<<'\n';}return 0;
}

就会上面几题~~

F-小松鼠吃松果

大佬题解
在这里插入图片描述

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;
const int N=100010;
int n,m;
int pos[N],h[N];
int hs[N];
struct node
{int t,p,w;bool operator<(const node&o) const{return t==o.t?p<o.p:t<o.t;}
}q[N];
ll tree[N];
int lowbit(int x) 
{return x&-x;
}
void add(int k,ll x)
{for(;k<=n;k+=lowbit(k)) tree[k]=max(tree[k],x);
}
ll query(int k)
{ll res=0;for(;k;k-=lowbit(k)) res=max(res,tree[k]);return res;
}
int main()
{IO;int T=1;//cin>>T;while(T--){cin>>n>>m;for(int i=1;i<=m;i++) cin>>pos[i];for(int i=1;i<=m;i++) cin>>h[i];for(int i=1;i<=n;i++){cin>>q[i].t>>q[i].p>>q[i].w;q[i].t+=h[q[i].p];}for(int i=1;i<=n;i++){int x=q[i].t-pos[q[i].p];int y=q[i].t+pos[q[i].p];q[i].t=x,q[i].p=y;hs[i]=y;}sort(hs+1,hs+1+n);sort(q+1,q+1+n);ll res=0;for(int i=1;i<=n;i++){int k=lower_bound(hs+1,hs+1+n,q[i].p)-hs;ll dp=query(k)+q[i].w;res=max(res,dp);add(k,dp);}cout<<res<<'\n';}return 0;}

要加油哦~

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

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

相关文章

.Net Core 2.1 通用主机(Core 在控制台应用程序中的应用)

一、介绍官方文档中说&#xff0c;Microsoft.AspNetCore.App 元包&#xff08;ASP.NET Core 2.1 或更高版本&#xff09;包含通用主机的Microsoft.Extensions.Hosting包&#xff0c;当创建控制台项目以后并没有相应的包。在官方案例中所用的Nuget包有&#xff1a;1. Microsoft.…

产品开发管理之流程和体系(总篇)

前言秋风瑟瑟&#xff0c;夏日的灼热犹在&#xff0c;就瞬间迎来刺骨寒风。凛冬将至&#xff0c;今天对我们来说&#xff0c;像贴面的利刃一样冰冷而真实。农民、建筑工人、司机、程序员、私企高管、私企老板、资本巨富&#xff0c;都被裹挟进了这个焦灼的时代&#xff0c;没有…

YbtOJ#593-木棍问题【费用流】

正题 题目链接:https://www.ybtoj.com.cn/contest/114/problem/3 题目大意 n∗mn*mn∗m的网格上有一些格子有木球&#xff0c;两个相邻木球直接可以有木棍。 两个LLL形的木棍会产生AAA的代价&#xff0c;两个III形的木棍会产生BBB的代价 对于每个kkk求出插入kkk根木棍时的最小…

1143 Lowest Common Ancestor 甲级

题意&#xff1a; 给出一棵二叉搜索树的前序遍历&#xff0c;问结点u和v的共同最低祖先是谁&#xff0c;利用先序遍历特点。 二叉搜索树满足&#xff1a; 节点的左子树只包含键小于节点键的节点。 节点的键只包含节点的右键大于或等于子树的节点的键。 左子树和右子树也必须是…

《.NET Core 2.0 应用程序高级调试》7折优惠

活动截止到2018年10月15日晚24:00&#xff0c;之后恢复8.6折价格。都说.NET Core 在Linux 上跑得快&#xff0c;可是如果.NET Core 程序在Linux 操作系统上出现了内存泄漏、死锁或者崩溃情况怎么办&#xff1f;怎样在Linux 和macOS操作系统上有效地使用工具对.NET Core 应用程序…

确认过眼神,你是ApacheWay的人 | COSCon‘18 特辑

*大会官网&#xff1a;http://coscon.kaiyuanshe.cn/*报名链接&#xff1a;点击文末“阅读原文”如果您对 Apache 感兴趣那么中国开源年会COSCon18将是您不可错过的一站写在大会前为什么本土开源项目对 Apache 青睐相加我们用实际数据说话Apache 顶级项目Apache CarbonData Car…

牛客练习赛 57——manacher算法 树形dp?

A - Tic-Tac-Toe 直接考虑每个人8种赢的情况即可。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; const int N5; char g[N][N]; int main() {//IO;int …

asp.net core 错误定位 vs2017 远程调试部署在centos上的asp.net core程序

前言程序运行中会出现各种BUG。 排除BUG有三种方式。一、访问页面直接报错误信息出于安全&#xff0c;服务器是关闭这个功能的。在centos上可以用 命令设置环境变量来解决&#xff1a; export ASPNETCORE_ENVIRONMENTDevelopment二、console输出console.WriteLine(" hel…

AspNet Core下利用 app-metrics+Grafana + InfluxDB实现高大上的性能监控界面

在日常系统工作中&#xff0c;我们为了洞察系统的问题和运作情况通常会记录日志的方式来进行分析&#xff0c;但是在很多情况下都是被动的在出问题后才会去查日志。在很多时候&#xff0c;我们可能更需要相对实时的了解整个系统或者某一时段的运行的情况&#xff0c;诸如系统出…

微软向Linux表白: 向Linux社区开放60000多项专利

10 月 10 日&#xff0c;微软在博客中宣布正式加入开放创新网络&#xff08;Open Invention Network, 简称“OIN”&#xff09;&#xff0c;向所有开源专利联盟的成员开放其专利组合。对开源&#xff0c;微软是认真的OIN 的首席执行官 Keith Bergelt 在采访中说道&#xff1a;微…

牛客网dp专题 数位dp

文章目录数位dp例题&#xff1a;NC116652 uva11038 How many 0sNC15035 送分了QAQNC20669 诡异数字NC20665 7的意志NC17385 Beautiful NumbersCF55D NC108918 Beautiful numbers习题&#xff1a;NC17867 明七暗七NC19327 好朋友NC19945 [CQOI2016]手机号码NC20268 [SCOI2009]WI…

微软技术大会预览:DevOps顾问是怎样开发自己的产品的

“没有人比我们更懂DevOps”&#xff0c;这句话不是谁都敢说的。从无人问津到整个IT行业趋之若鹜&#xff0c;DevOps火起来也不过是3年的事情&#xff0c;但是leansoftX.com的DevOps资深顾问都是在这个行业已经摸爬滚打了10年的老兵了&#xff0c;从一开始的SDLC&#xff0c;到…

PEACHPIE 0.9.11 版本发布,可以上生产了

PeachPie在官方博客&#xff08;https://www.peachpie.io/2018/10/release-0911-visual-studio.html&#xff09;发布了PeachPie的0.9.11版本 - 用于.NET和.NET Core的PHP编译器和运行时。此更新为项目管理引入了许多新功能&#xff0c;兼容性增强和改进。0.9.11是第一个非预览…

[ZJOI2007]棋盘制作

文章目录[ZJOI2007]棋盘制作题意&#xff1a;题解&#xff1a;单调栈代码&#xff1a;悬线法[ZJOI2007]棋盘制作 题意&#xff1a; 选取最大的01相邻的正方形和矩形&#xff0c;输出面积 题解&#xff1a; 单调栈 如图&#xff1a; 左图为题目给的样例&#xff0c;我们要找…

.net core实践系列之SSO-同域实现

前言SSO的系列还是以.Net Core作为实践例子与大家分享&#xff0c;SSO在Web方面复杂度分同域与跨域。本篇先分享同域的设计与实现&#xff0c;跨域将在下篇与大家分享。如有需要调试demo的&#xff0c;可把SSO项目部署为域名http://sso.cg.com/&#xff0c;Web1项目部署为http:…

【悬线法】学习总结

【悬线法】学习总结 主要用于求满足某条件的最大矩阵 定义&#xff1a; 一条竖线&#xff0c;竖线的上端点位于矩阵的上边界或是一个障碍点&#xff0c;然后对这条悬线进行左右移动&#xff0c;直到移至障碍点或者是矩阵边界&#xff0c;进行确定这条悬线所在的极大矩阵。 底…

开源硬件论坛,燃烧你的创造力

写在大会前开源融合&#xff1a;比特与原子开源硬件延伸着开源软件的理念&#xff0c;包括硬件设计文件及基于此文件的产品都使用具有开源性质的许可协议&#xff0c;自由使用分享。虽然&#xff0c;从仅开放硬件所配套软件到对硬件本身设计也进行开放的过程&#xff0c;曾经一…

牛客练习赛 55

A - 等火车 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<queue> #include<string> #include<vector> #include<cstdio> #inclu…

单调栈讲解

以前一直有接触&#xff0c;但是一直没单独进行分析处理 单调栈&#xff1a;维护其中元素单调性的栈 也就是从栈底到栈顶都是有序的 维护&#xff1a;如果入栈的元素满足单调性&#xff0c;直接入栈&#xff1b;如果不满足&#xff0c;就让栈顶元素出栈&#xff0c;直到能让入栈…

【深圳(活动)】70多场干货分享!价值899元的2018中国开源年会门票等你认领

开源发展20年&#xff0c;.NET Core开源 4年时间&#xff0c;.NET开源实现Mono也有18年的时间&#xff0c;特别近年国内.NET Core社区的蓬勃发展&#xff0c;.NET Core中国社区作为中国开源社区的重要参与者&#xff0c;获得官方的优惠票. 活动主办方开源社&#xff0c;为.NET …