牛客练习赛 61(待补F-点分治?)

A. 打怪

先求出每次打死一只怪需要掉多少血,然后就直接算出能够打死多少只。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{IO;int T=1;cin>>T; while(T--){int h,a,H,A;cin>>h>>a>>H>>A;int cnt=(H+a-1)/a;int p=(cnt-1)*A;if(p) cout<<(h-1)/p<<'\n';else cout<<"-1\n";}return 0;
}

B. 吃水果

不妨设n<mn<mn<m,如果我们先吃kkk次然后加倍一次能够使得m=nm=nm=n那么需要满足2×(n−k)=m−k2×(n-k)=m-k2×(nk)=mk,得出k=2n−mk=2n-mk=2nm,由此只需先让加倍到2n>=m2n>=m2n>=m然后吃kkk次再次加倍然后在吃m−km-kmk次即可吃完,由此上面贪心一定最小。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{IO;int T=1;cin>>T;while(T--){int n,m;cin>>n>>m;if(n>m) swap(n,m);int res=m;while(n<m){res++;n*=2;}cout<<res<<'\n';}    return 0;
}

C. 四个选项

首先先用并查集统计出每个连通块的数量,然后把每一个连通块看成一个物品,跑一边背包问题即可。
状态表示:f(i,j,k,l,r)f_{(i,j,k,l,r)}f(i,j,k,l,r)考虑前iii个物品,答案A选了jjj个,答案B选了kkk个,答案C选了lll个,答案D选了rrr个的集合。
状态转移:考虑第iii个物品放在哪个答案中不难写出转移。
感觉这方法有点暴力,但是思路应该还是非常好理解

#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=15;
int p[N],sz[N];
ll f[N][N][N][N][N];
int find(int x)
{return x==p[x]?x:p[x]=find(p[x]);
}
int main()
{IO;int T=1;//cin>>T;while(T--){for(int i=1;i<=12;i++) p[i]=i,sz[i]=1;int a,b,c,d,m;cin>>a>>b>>c>>d>>m;vector<int> v;v.push_back(0);while(m--){int a,b;cin>>a>>b;int pa=find(a),pb=find(b);if(pa==pb) continue;sz[pb]+=sz[pa];p[pa]=pb;}for(int i=1;i<=12;i++) if(p[i]==i) v.push_back(sz[i]);f[0][0][0][0][0]=1;int n=v.size()-1;for(int i=1;i<=n;i++)for(int j=0;j<=a;j++)for(int k=0;k<=b;k++)   for(int l=0;l<=c;l++)for(int r=0;r<=d;r++){if(j>=v[i]) f[i][j][k][l][r]+=f[i-1][j-v[i]][k][l][r];if(k>=v[i]) f[i][j][k][l][r]+=f[i-1][j][k-v[i]][l][r];if(l>=v[i]) f[i][j][k][l][r]+=f[i-1][j][k][l-v[i]][r];if(r>=v[i]) f[i][j][k][l][r]+=f[i-1][j][k][l][r-v[i]];}cout<<f[n][a][b][c][d]<<'\n';}return 0;
}

D.最短路变短了

原图跑一边dijsktra算出dist1[i]表示1~i的最短距离,在跑一边反图算出dist2[i]表示i~n的最短距离。
考虑如果u→vu\to vuv之间的边取反能够缩短1→n1\to n1n的最短距离,那么说明目前最短路径一定是1→⋯→v→u→⋯→n1\to \dots \to v\to u\to \dots \to n1vun,因此只需要判断该条件是否成立即可得到答案(dist1[v]+dist2[u]+c<dist1[n]

#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;
typedef pair<ll,int> pli;
const int N=100010,M=400010;
int h1[N],h2[N],e[M],ne[M],idx;
ll w[M];
ll dist1[N],dist2[N];
bool st[N];
struct node
{int u,v;ll w;
}E[M];
int n,m,q;
void add(int h[],int a,int b,ll c)
{e[idx]=b;ne[idx]=h[a];w[idx]=c;h[a]=idx++;
}
void dijkstra(int start,int h[],ll dist[])
{memset(dist,0x3f,8*N);memset(st,0,sizeof st);priority_queue<pli,vector<pli>,greater<pli> >q;dist[start]=0;q.push({0,start});while(q.size()){int t=q.top().second;q.pop();if(st[t]) continue;st[t]=1;for(int i=h[t];i!=-1;i=ne[i]){int j=e[i];if(dist[j]>dist[t]+w[i]){dist[j]=dist[t]+w[i];q.push({dist[j],j});}}}
}
int main()
{IO;int T=1;//cin>>T;while(T--){memset(h1,-1,sizeof h1);memset(h2,-1,sizeof h2);cin>>n>>m;for(int i=1;i<=m;i++){cin>>E[i].u>>E[i].v>>E[i].w;add(h1,E[i].u,E[i].v,E[i].w);add(h2,E[i].v,E[i].u,E[i].w);}dijkstra(1,h1,dist1);dijkstra(n,h2,dist2);cin>>q;while(q--){int id;cin>>id;int u=E[id].u,v=E[id].v,c=E[id].w;if(dist1[n]>dist1[v]+dist2[u]+c) cout<<"YES\n";else cout<<"NO\n";}}return 0;
}

E.相似的子串

字符串哈希+二分
二分扫一遍序列即可,用哈希表记录出现次数已经最后一次出现的位置。
时间复杂度O(nlogn)O(nlogn)O(nlogn)

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int N=200010,P=131;
unordered_map<ull,pii> mp;
ull h[N],p[N];
int n,k;
char s[N];
ull get(int l,int r)
{return h[r]-h[l-1]*p[r-l+1];
}
bool check(int mid)
{mp.clear();for(int i=mid;i<=n;i++){ull v=get(i-mid+1,i);if(mp[v].second<=i-mid) {mp[v].first++;mp[v].second=i;if(mp[v].first>=k) return 1;}}return 0;
}
int main()
{IO;int T=1;//cin>>T;while(T--){cin>>n>>k;cin>>s+1;p[0]=1;for(int i=1;i<=n;i++){p[i]=p[i-1]*P;h[i]=h[i-1]*P+s[i]-'a'+1;}int l=0,r=n;while(l<r){int mid=l+r+1>>1;if(check(mid)) l=mid;else r=mid-1;}cout<<l<<'\n';}return 0;
}

F.苹果树

点分治?待补?

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

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

相关文章

asp.net core集成CAP(分布式事务总线)

一、前言感谢杨晓东大佬为社区贡献的CAP开源项目&#xff0c;传送门在此&#xff1a;.NET Core 事件总线,分布式事务解决方案&#xff1a;CAP 以及 如何在你的项目中集成 CAP【手把手视频教程】&#xff0c;之前也在工作中遇到分布式数据一致性的问题&#xff0c;也一直都是基于…

Ybt#452-序列合并【期望dp】

正题 题目链接:https://www.ybtoj.com.cn/contest/113/problem/2 题目大意 一个空序列&#xff0c;每次往末尾加入一个[1,m][1,m][1,m]中的随机一个数。如果末尾两个数相同都为xxx且(x<t)(x<t)(x<t)&#xff0c;那么将它们合并成x1x1x1。 如果序列长度为nnn且无法合…

【Trie】【费用流】管道监控(loj 3026)

正题 loj 3026 题目大意 给你一棵树&#xff0c;和若干匹配串&#xff0c;如果一个节点向下的某条链构成了匹配串i&#xff0c;则可以花费这w_i匹配这条链&#xff0c;问你匹配完所有点的最小代价 解题思路 这题可以理解为树上树上的线性规划 先对于每个匹配串倒着建trie&a…

【每日一题】8月12日题目精讲 Mr. Kitayuta, the Treasure Hunter

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 The Shuseki Islands are an archipelago of 30001 small islands in the Yutampo Se…

.Net Core中利用TPL(任务并行库)构建Pipeline处理Dataflow

在学习的过程中&#xff0c;看一些一线的技术文档很吃力&#xff0c;而且考虑到国内那些技术牛人英语都不差的&#xff0c;要向他们看齐&#xff0c;所以每天下班都在疯狂地背单词&#xff0c;博客有些日子没有更新了&#xff0c;见谅见谅 什么是TPL?Task Parallel Library (T…

AT3950-[AGC022E]Median Replace【贪心,dp】

正题 题目链接:https://www.luogu.com.cn/problem/AT3950 题目大意 一个包含?,0,1?,0,1?,0,1的长度为奇数的序列&#xff0c;把???替换为0/10/10/1。每次可以选择三个数变成它们的中位数&#xff0c;求有多少种替换方案使得能够把序列最终变为一个111。 1≤∣S∣≤3105…

【excrt】屠龙勇士(luogu 4774)

正题 luogu 4774 题目大意 有n条龙&#xff0c;第i条血量为aia_iai​&#xff0c;回血量为bib_ibi​&#xff0c;杀死后掉落伤害为DiD_iDi​的刀&#xff0c;初始有若干刀 杀第i条龙要用现有伤害比aia_iai​小的刀中伤害最大的&#xff08;如果没有就用伤害最小的&#xff0…

牛客练习赛 60(待补E-长链剖分或者dsu)

A.大吉大利 位运算有独立性&#xff0c;按位计算对答案的贡献即可。 #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; typedef uns…

.NET Core Agent

熟悉java的朋友肯定知道java agent&#xff0c;当我看到java agent时我很是羡慕&#xff0c;我当时就想.net是否也有类似的功能&#xff0c;于是就搜索各种资料&#xff0c;结果让人很失望。当时根据 https://github.com/OpenSkywalking/skywalking-netcore 找到这个 https://d…

【每日一题】8月14日题目精讲 [SCOI2010]游戏

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 lxhgww最近迷上了一款游戏&#xff0c;在游戏里&#xff0c;他拥有很多的装备&#x…

AT3957-[AGC023F]01 on Tree【贪心,堆】

正题 题目链接:https://www.luogu.com.cn/problem/AT3957 题目大意 nnn个节点的一棵树&#xff0c;每个节点有0/10/10/1。每次删除一个根节点&#xff0c;然后把该节点的值填入序列&#xff0c;求最终序列的最小逆序对数量。 n≤2105n\leq 2\times 10^5n≤2105 解题思路 考虑…

【状压DP】吃货JYY(luogu 6085)

正题 luogu 6085 题目大意 给你一个无向图&#xff0c;其中有一些边是必须走的&#xff0c;问你从1开始走&#xff0c;经过所有必须走的边&#xff0c;然后回到1的最短路径 解题思路 n很小&#xff0c;可以先用Floyd跑出两个点之间的最短路 然后状压DP&#xff0c;每个点存…

ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(二)

在上文中我介绍了ASP.NET Core应用程序容器化时需要注意的几个问题&#xff0c;并给出了一个案例应用程序&#xff1a;tasklist。今天接着上文的内容&#xff0c;继续了解一下如何使用Azure DevOps进行ASP.NET Core应用程序的持续集成。为了便于讨论&#xff0c;本文会将持续集…

Codeforces Round #672 (Div. 2)

A - Cubes Sorting 冒泡排序交换次数等于逆序对数&#xff0c;严格降序需要交换n(n−1)2\frac{n(n-1)}{2}2n(n−1)​次才能升序排列&#xff0c;由此只需要判断原数组是否严格降序即可。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize…

P6134-[JSOI2015]最小表示【bitset,拓扑排序】

正题 题目链接:https://www.luogu.com.cn/problem/P6134 题目大意 给出一张nnn个点mmm条边的DAGDAGDAG。求联通情况不变的情况下最多删除几条边。 1≤n≤3104,0≤M≤1051\leq n\leq 3\times 10^4,0\leq M\leq 10^51≤n≤3104,0≤M≤105 解题思路 拓扑排序后&#xff0c;如果…

【每日一题】8月17日题目精讲-[SCOI2009]生日礼物

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 小西有一条很长的彩带&#xff0c;彩带上挂着各式各样的彩珠。已知彩珠有N个&#xff…

纪中A组模拟赛总结(2021.7.21)

成绩 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4383838lyflyflyf393939363636000000333总结 T1发现数据很小可以直接暴力&#xff0c;就暴力求出所有方案数&#xff0c;然后堆排了一下 然后看到T2&#xff0c;发现不会 看着T3以为就是两种状态的最短…

Followme Devops step by step

接着上次分享的devops历程[Followme Devops实践之路], 大家希望能够出一个step by step手册, 那今天我就来和手把手来一起搭建这么一套环境, 演示整个过程!实验环境需要准备docker /docker compose建议大家使用国外的vps学习, 不需要考虑网络/gwf的问题/方便(本demo搭建在linod…

Codeforces Round #673 (Div. 2)——待补 E

由于开学了&#xff0c;一般晚上就不打cf了&#xff08;太晚了&#xff0c;寝室不太适合打&#xff09;&#xff0c;而且赛后也懒得vp&#xff0c;有时候会在图书馆口胡题目&#xff0c;然后回寝室补一补&#xff0c;不过我也写得太久了吧&#xff0c;很多细节疯狂wa A - Copy…

【每日一题】8月25日题目精讲 XOR-pyramid

文章目录题目描述&#xff1a;题解&#xff1a;代码&#xff1a;题目描述&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/problem/112798 来源&#xff1a;牛客网 输入描述: 输出描述: Print q lines — the answers for the queries. 示例1 输入 复制 3 8 4 1…