Codeforces Gym - 100917 部分题解

A.Abstract Picture Gym - 100917A

分析:由于最后刷的一笔肯定使得某一行或者是某一列均为相同的颜色。
因此我们可以在一开始找到所有的行或者列,他们的颜色全都一样,把这样的行或列加入到队列里面去。
我们处理在队列里面的行或者列:把它取出来,并且把该笔刷成的颜色全都变成’?’(即可变颜色)。然后检查是否有新的行或者列变成颜色均相同了,如果有的话,继续加入队列中进行处理。
队列出队的顺序反过来即为答案。
具体实现细节略。


F - Find the Length Gym - 100917F

分析:因为不存在重复边,那么一个最短简单环,至少需要有三个点组成,而删掉最短简单环上的一条边uvuv那么剩下的一条路径一定是删去uvuv之后的从uuv的最短路。
对于一定包含点ss的最短简单环,我们枚举这里面假装删掉的那条边,那么会出现下面两种情况
一、这条边的一个端点是s
这种情况下,设另一端的端点为tt,如果stt的最短路就不是这条边,那么很好,从stt的最短路+stst就是一个可行结果,更新包含ss的最短简单环答案;而如果从stt的最短路就是这条边,那么这种情况我们直接扔掉,不做处理,因为这种情况可以由枚举其他边的时候解决。
二、这条边的两个端点uv均非ss
这种情况下,从uvv的最短路还要包含s,那么只能是从uus的最短路++vss的最短路,这里千万要注意两条最短路不能有重复边。否则从uvv的最短路将不会包含点s
具体做法:
枚举点ss,跑一边Dijkstra,得到一颗最短路径树,然后根据第一种情况更新一次答案。根据第二种情况更新答案的时候注意,判断两条路不包含重复边的方法可以用lca,当然也可以用其他的方法。

#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
typedef pair<int,int> pii;
const int N = 400;
const int inf = 1e8;
int dist[N];
int G[N][N];
int n;
int fa[N];
int find(int x){return x == fa[x] ? x : fa[x] = find(fa[x]);
}
void dij(int s){for(int i = 1;i <= n;++i) dist[i] = inf,fa[i] = i;dist[s] = 0;priority_queue<pii> Q;Q.push({0,s});while(!Q.empty()){pii p = Q.top();Q.pop();int u = p.second;int d = -p.first;if(d > dist[u]) continue;for(int v = 1;v <= n;++v){if(v == u) continue;if(dist[v] > dist[u] + G[u][v]){dist[v] = dist[u] + G[u][v];if(u != s) fa[v] = u;Q.push({-dist[v],v});}}}
}
#define pr(x) cout<<#x<<":"<<x<<endl
int main(){cin>>n;for(int i = 1;i <= n;++i){for(int j = 1;j <= n;++j){scanf(" %d",&G[i][j]);if(G[i][j] == -1) G[i][j] = inf;}}for(int s = 1;s <= n;++s){int ans = inf;dij(s);for(int i = 1;i <= n;++i){if(fa[i] != i){if(dist[i] + G[i][s] < ans)ans = dist[i] + G[i][s];}}for(int i = 1;i <= n;++i){if(i == s) continue;for(int j = 1;j <= n;++j){if(j == s || find(i) == find(j)) continue;if(dist[i]+dist[j]+G[i][j] < ans)ans = dist[i]+dist[j]+G[i][j];}}ans = ans == inf ? -1:ans;printf("%d\n",ans);}return 0;
}

I - Interactive Casino Gym - 100917I

这道题很有意思。
我们把所有的种子每个都用随机数生成器计算出前几个值,并把每个值得到的输赢用01串存起来,实践发现当计算到第38层的时候,我们就可以把每个种子的01串给区分开了。对于每个种子,01串的长度为38。
我们将这所有的01串放入一个Trie树里面去。一开始一直用猜1来试,可以根据反馈结果确定这次的位。38轮以后我们就可以找得到随机数种子了。找到随机数种子这道题基本就结束了。


J - Judgement Gym - 100917J

我们用背包dp求出在第一种方案下的权值和为s1s1时候所能得到第二种方案下权值和的最大值s2s2,只要出现s1<ps1<ps2>=qs2>=q的情况,那么就输出”NO”并且打印方案。反过来再做一遍就好了。
这里注意这道题要使用滚动数组,这样的话记录方案就会变得麻烦,为了保存信息,需要使用一个长为100的bitset来存方案。

#include <iostream>
#include <cstdio>
#include <assert.h>
#include <cstring>
#include <bitset>
using namespace std;
const int N = 1e6+10; 
int n,upb[2],val[2][N];
int dp[2][N];
bitset<101> way[2][N];
int vis[111];
int main(){scanf("%d",&n);scanf("%d",&upb[0]);for(int i = 1;i <= n;++i) scanf("%d",&val[0][i]);scanf("%d",&upb[1]);for(int i = 1;i <= n;++i) scanf("%d",&val[1][i]);int cc = 0 ;for(int cas = 0;cas < 2;++cas){for(int i = 1;i <= n;++i){for(int j = upb[cas]-1;j >= val[cas][i];j--){if(dp[cas][j-val[cas][i]] + val[cas^1][i] > dp[cas][j]){dp[cas][j] = dp[cas][j-val[cas][i]] + val[cas^1][i];//map[cas][j] = i;way[cas][j] = way[cas][j-val[cas][i]];way[cas][j].set(i); if(dp[cas][j] >= upb[cas^1]){//output(cas,j);puts("NO");for(int i = 1;i <= n;++i){cout<<way[cas][j][i];}return 0;}}}}}puts("YES");return 0;
}

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

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

相关文章

【最短路】【Floyed】医院设置(ssl 1614)

医院设置 ssl 1614 题目大意&#xff1a; 有n个点&#xff0c;在一个点上安医院&#xff0c;使这个点到其他点的最短路之和最小 原题&#xff1a; Description 设有一棵二叉树&#xff08;如右图&#xff09;。其中&#xff0c;圈中的数字表示结点中居民的人口。圈边上数…

牛客练习赛69C-旅行【结论,最大生成树】

正题 题目链接:https://ac.nowcoder.com/acm/contest/7329/C 题目大意 disx,ydis_{x,y}disx,y​表示x,yx,yx,y的所有路径的最短的边的最大值。 求一个1∼n1\sim n1∼n的排列&#xff0c;使得∑i2ndisi,i−1\sum_{i2}^ndis_{i,i-1}∑i2n​disi,i−1​最大 解题思路 首先一定是…

拓展 NLog 优雅的输送日志到 Logstash

在上上篇博客通过对aspnetcore启动前配置做了一些更改&#xff0c;以及对nlog进行了自定义字段&#xff0c;可以把请求记录输送到mysql&#xff0c;正式情况可能不会这么部署。因为近期也在学习elk&#xff0c;所以就打算做一个实例&#xff0c;结合nlog把日志输送到logstash&a…

曼哈顿距离与切比雪夫距离的转化及prufer序列

目录 曼哈顿距离与切比雪夫距离的相互转化prufer序列 1. 曼哈顿距离 与 切比雪夫距离 的相互转化 曼哈顿距离 |x1−x2||y1−y2|max(x1−x2y1−y2,x1−x2−y1y2,−x1x2y1−y2,−x1x2−y1y2)|x1−x2||y1−y2|max(x1−x2y1−y2,x1−x2−y1y2,−x1x2y1−y2,−x1x2−y1y2)|x_1 - x…

初一模拟赛总结(2019.3.9)

成绩&#xff1a; rank算上了其他大佬 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4222lyflyflyf230230230100100100303030000100100100333hkyhkyhky909090000000000909090444fyfyfy808080000606060000202020444whdwhdwhd808080202020606060000000666lth…

牛客练习赛69E-子串【树状数组】

正题 题目链接:https://ac.nowcoder.com/acm/contest/7329/E 题目大意 给出一个nnn的排列&#xff0c;求有多少个区间[l,r][l,r][l,r]使得最大值是rrr&#xff0c;最小值是lll。 解题思路 首先对于一个位置的值作为左端点和右端点都有一段合法区间&#xff08;到左边第一个比…

[译]如何在.NET Core中使用System.Drawing?

你大概知道System.Drawing&#xff0c;它是一个执行图形相关任务的流行的API&#xff0c;同时它也不属于.NET Core的一部分。最初是把.NET Core作为云端框架设计的&#xff0c;它不包含非云端相关API。另一方面&#xff0c;.NET Core是跨平台框架&#xff0c;它不包含任何操作系…

【dfs】棋盘变幻

棋盘变幻 题目大意&#xff1a; 有一些棋子&#xff08;黑/白&#xff09;&#xff0c;可以将某一列的棋子颜色反转&#xff0c;要黑棋尽可能小 原题&#xff1a; 题目描述 小G在一个n*m的棋盘上随意放上了一些黑色的棋子&#xff0c;然后又在剩下所有没有放棋子的格子里放…

组合数学与数论函数专题

组合数学专题 专题简介 本专题包含了一些组合数学中常见的套路和方法,如拉格朗日插值,动态规划,容斥原理,狄利克雷卷积,线性筛,杜教筛 等等. 目录 2018 四川省赛GRISAIA (数论分块)HDU 6428 Calculate (狄利克雷卷积,线性筛)BZOJ4559 成绩比较 (动态规划,拉格朗日插值)BZOJ…

关于Visual Studio 2019的前期详情

近日&#xff0c;来自微软公司的 John Montgomery 正式宣布&#xff0c;Visual Studio 2019已进入开发阶段。Montgomery 表示&#xff0c;之所以选择在这个时间点公开这个消息&#xff0c;是因为微软准备在 GitHub 上公开可见的项目&#xff08;包括 .NET 和 Roslyn&#xff09…

nssl1522-简单数数题【dp】

正题 题目大意 nnn个数的一个集合&#xff0c;求一个有多少个子集使得这个子集的所有子集的权值和的和是mmm的倍数 解题思路 考虑dp&#xff0c;选中集合中每一个数的贡献次数是2∣S∣−12^{|S|-1}2∣S∣−1&#xff0c;设fi,j,kf_{i,j,k}fi,j,k​表示选到第iii&#xff0c;现…

蛋糕店

蛋糕店 题目大意&#xff1a; 有n个人&#xff0c;让他们排队&#xff0c;每个人都有一个愤怒值&#xff0c;总值为每个人的愤怒值乘上&#xff08;他在队列中的位置-1&#xff09;加在一起 原题&#xff1a; 题目描述 最近小G新开了一家蛋糕店。开业第一天&#xff0c;一…

开源的,跨平台的.NET机器学习框架ML.NET

微软在Build 2018大会上推出的一款面向.NET开发人员的开源&#xff0c;跨平台机器学习框架ML.NET。 ML.NET将允许.NET开发人员开发他们自己的模型&#xff0c;并将自定义ML集成到他们的应用程序中&#xff0c;而无需事先掌握开发或调整机器学习模型的专业知识。在采用通用机器学…

nssl1519-背包签到题【数论】

正题 题目链接:http://10.156.31.134/contestnew.aspx?cid189 题目大意 nnn种物品&#xff0c;每种aia_iai​个。放进kkk个有序盒子求方案数&#xff08;可以不放完&#xff09; 解题思路 不放完其实就是k1k1k1个盒子&#xff0c;插板法求CkaiaiC_{ka_i}^{a_i}Ckai​ai​​&…

【dfs】相似度

相似度 题目大意&#xff1a; 有两个图&#xff0c;问他们的相似度是多少&#xff08;相似度为连接两个点的相样线的条数&#xff09; 原题&#xff1a; 题目描述 小G通过摆放一些城市和道路构成了一个世界地图。趁着小G出去玩的时候&#xff0c;大G把小G的世界地图上的城…

虚树-树上动态规划的利器

虚树 问题引入 在一类树上动态规划问题中,题目给出的询问往往包含树上的很多各节点,并保证总的点数规模小于某个值. 如果我们直接在整颗树上进行dpdp的话,时间复杂度与询问的次数有关,这显然是不可接受的,如果我们可以找到一种动态规划的方法,使其时间复杂度与询问中点的实际…

牛客练习赛69D-火柴排队【dp】

正题 题目链接:https://ac.nowcoder.com/acm/contest/7329/D 题目大意 nnn个数的序列&#xff0c;排序后让随机kkk个数加上ddd&#xff0c;求依旧满足单调上升的期望概率 解题思路 对于一个位置加上ddd后会让到后面一段范围内都得加上ddd。我们预处理一个lil_ili​表示如果ii…

微软推出Visual Studio Kubernetes工具包预览版

微软表示&#xff0c;利用 Visual Studio Kubernetes 这个工具&#xff0c;使用者可以直接在该环境中&#xff0c;构建 Kubernetes 容器应用程序项目&#xff0c;或者让现有的 .NET 网页应用程序也兼容 Kubernetes。除了公有云基础架构环境要支持 Kubernetes&#xff0c;微软现…

伸展树模板

伸展树模板 #include <iostream> #include <cstdio>#define pr(x) std::cout << #x << " : " << x << std::endlclass SplayTree{ public:struct Node{int val;int size;int tag;Node *father;Node *son[2];Node(int val,Node *…

【DP】Sam数

Sam数 题目大意&#xff1a; 问位数为n&#xff0c;且每一位的数字与相邻数字的差值小于等于2的数有多少个 原题&#xff1a; 题目描述 小G最近发现了一种非常有趣的数&#xff0c;他将这种数称之为Sam数。Sam数具有以下特征&#xff1a;相邻两位的数字之差不超过2。小G还…