Caddi Programming Contest 2021(AtCoder Beginner Contest 193) 题解

Caddi Programming Contest 2021(AtCoder Beginner Contest 193)

A - Discount

打折浮点数除即可

B - Play Snuke

枚举判断符合要求的求最小值即可

C - Unexpressed

O(n)O(\sqrt{n})O(n)枚举aaa,暴力翻倍(最小的222最多乘323232次就会超过nnn的上限)

mapmapmap存该数有没有被aba^bab覆盖到,数量不会太多,不用担心MLEMLEMLE

D - Poker

暴力枚举,计算情况。注意两个串选择同一数字时的小细节即可

#include <cstdio>
#include <cmath>
#define int long long
#define maxn 20
int n;
char s[maxn], t[maxn];
int tot[maxn], cnt_s[maxn], cnt_t[maxn];int calc( int x ) {return x * ( x - 1 );
}signed main() {scanf( "%lld %s %s", &n, s + 1, t + 1 );for( int i = 1;i <= 4;i ++ )tot[s[i] - '0'] ++, tot[t[i] - '0'] ++;int cnt = 0;for( int i = 1;i <= 9;i ++ ) {if( tot[i] == n ) continue;for( int j = 1;j <= 9;j ++ ) {if( ( tot[j] == n ) || ( i == j && tot[i] + 1 == n ) ) continue;int sum_s = 0, sum_t = 0;s[5] = i + '0', t[5] = j + '0';for( int k = 1;k <= 5;k ++ )cnt_s[s[k] - '0'] ++, cnt_t[t[k] - '0'] ++;for( int k = 1;k <= 9;k ++ ) {sum_s += k * pow( 10, cnt_s[k] );sum_t += k * pow( 10, cnt_t[k] );}if( sum_s > sum_t ) {if( i == j )cnt += ( n - tot[i] ) * ( n - tot[i] - 1 );elsecnt += ( n - tot[i] ) * ( n - tot[j] );}for( int k = 1;k <= 9;k ++ )cnt_s[k] = cnt_t[k] = 0;}}printf( "%.10f\n",  cnt * 1.0 / ( calc( 9 * n - 8 ) ) );return 0;
}

E - Oversleeping

发现每段差都在500以内,暴力枚举相遇点

k1∗(2X+2Y)+X+i=k2∗(P+Q)+P+j⇔k1∗(2X+2Y)−k2∗(P+Q)=P−X+j−ik_1*(2X+2Y)+X+i=k_2*(P+Q)+P+j \Leftrightarrow k_1*(2X+2Y)-k_2*(P+Q)=P-X+j-ik1(2X+2Y)+X+i=k2(P+Q)+P+jk1(2X+2Y)k2(P+Q)=PX+ji

即扩欧,k1′(2X+2Y)+k2′(P+Q)=gcd(2X+2Y,P+Q)k_1'(2X+2Y)+k_2'(P+Q)=gcd(2X+2Y,P+Q)k1(2X+2Y)+k2(P+Q)=gcd(2X+2Y,P+Q)

有解必须满足gcd(2X+2Y,P+Q)∣P−X+j−igcd(2X+2Y,P+Q)|P-X+j-igcd(2X+2Y,P+Q)PX+ji

扩欧求出的解不一定是非负最优解,扩倍(乘对方的倍数)成非负再取模变最优

#include <cstdio>
#include <iostream>
using namespace std;
#define int __int128
int T, X, Y, P, Q;void read( int &x ) {x = 0; char s = getchar();while( s < '0' || s > '9' ) s = getchar();while( '0' <= s && s <= '9' ) {x = ( x << 1 ) + ( x << 3 ) + ( s ^ 48 );s = getchar();}
}void exgcd( int a, int b, int &d, int &x, int &y ) {if( ! b ) d = a, x = 1, y = 0;else {exgcd( b, a % b, d, y, x );y -= x * ( a / b );}
}void print( int x ) {if( x > 9 ) print( x / 10 );putchar( ( x % 10 ) + '0' );
}signed main() {read( T );while( T -- ) {read( X ), read( Y ), read( P ), read( Q );int d, x, y, ans = 1e32;exgcd( X * 2 + Y * 2, P + Q, d, x, y );for( int i = 0;i < Y;i ++ )for( int j = 0;j < Q;j ++ ) {int c = P + j - X - i;if( c % d ) continue;int k1 = c / d * x;int k2 = c / d * ( - y );int mod1 = ( P + Q ) / d, mod2 = ( X * 2 + Y * 2 ) / d;if( k1 < 0 ) {int t = ( - k1 + mod1 - 1 ) / mod1;k1 += mod1 * t, k2 += mod2 * t;}if( k2 < 0 ) {int t = ( - k2 + mod2 - 1 ) / mod2;k1 += mod1 * t, k2 += mod2 * t;}k1 %= mod1;ans = min( ans, k1 * ( X * 2 + Y * 2 ) + X + i );}if( ans == 1e32 ) printf( "infinity\n" );else print( ans ), putchar( '\n' );}return 0;
}

F - Zebraness

一般的这种相邻之间计算贡献都可以转换成最小割问题,考虑整体边数减去最小失去

如果相邻两个点是一样的颜色,则失去111

但是这样根本无法在网络流上进行切割

所以考虑奇偶分开,天然分裂相邻块

翻转奇数块颜色,进行连边;固定颜色的最大可以流出444,至于不确定的就根据相邻边选择

按颜色分给超级源点和超级汇点,大约是在O(n3)O(n^3)O(n3)

#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define maxn 105
#define inf 0x7f7f7f7f
struct node {int v, nxt, flow;
}edge[maxn * maxn * 30];
int n, cnt, s, t;
char ch[maxn][maxn];
int head[maxn * maxn], cur[maxn * maxn], dis[maxn * maxn];
queue < int > q;void addEdge( int u, int v, int c ) {edge[cnt].v = v;edge[cnt].nxt = head[u];edge[cnt].flow = c;head[u] = cnt ++;edge[cnt].v = u;edge[cnt].nxt = head[v];edge[cnt].flow = 0;head[v] = cnt ++;
}int id( int i, int j ) {return ( i - 1 ) * n + j;
}bool bfs() {memset( dis, 0, sizeof( dis ) );memcpy( cur, head, sizeof( head ) );dis[s] = 1; q.push( s );while( ! q.empty() ) {int u = q.front(); q.pop();for( int i = head[u];~ i;i = edge[i].nxt ) {int v = edge[i].v;if( ! dis[v] && edge[i].flow ) {dis[v] = dis[u] + 1;q.push( v );}}}return dis[t];
}int dfs( int u, int cap ) {if( u == t || ! cap ) return cap;int flow = 0;for( int i = cur[u];~ i;i = edge[i].nxt ) {int v = edge[i].v; cur[u] = i;if( dis[v] == dis[u] + 1 ) {int w = dfs( v, min( cap, edge[i].flow ) );if( ! w ) continue;cap -= w;flow += w;edge[i].flow -= w;edge[i ^ 1].flow += w;if( ! cap ) break;}}return flow;
}int dinic() {int ans = 0;while( bfs() ) ans += dfs( s, inf );return ans;
}int main() {memset( head, -1, sizeof( head ) );scanf( "%d", &n );for( int i = 1;i <= n;i ++ )scanf( "%s", ch[i] + 1 );for( int i = 1;i <= n;i ++ )for( int j = 1;j <= n;j ++ )if( ! ( ( i + j ) & 1 ) || ch[i][j] == '?' ) continue;else ch[i][j] = 'B' + 'W' - ch[i][j];s = 0, t = n * n + 1;for( int i = 1;i <= n;i ++ )for( int j = 1;j <= n;j ++ ) {if( ch[i][j] == 'B' ) addEdge( s, id( i, j ), 4 );if( ch[i][j] == 'W' ) addEdge( id( i, j ), t, 4 );}for( int i = 1;i <= n;i ++ )for( int j = 1;j < n;j ++ ) {addEdge( id( i, j ), id( i, j + 1 ), 1 );addEdge( id( i, j + 1 ), id( i, j ), 1 );}for( int i = 1;i < n;i ++ )for( int j = 1;j <= n;j ++ ) {addEdge( id( i, j ), id( i + 1, j ), 1 );addEdge( id( i + 1, j ), id( i, j ), 1 );}printf( "%d\n", 2 * n * ( n - 1 ) - dinic() );return 0;
}

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

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

相关文章

NET Core微服务之路:SkyWalking+SkyApm-dotnet分布式链路追踪系统的分享

对于普通系统或者服务来说&#xff0c;一般通过打日志来进行埋点&#xff0c;然后再通过elk或splunk进行定位及分析问题&#xff0c;更有甚者直接远程服务器&#xff0c;直接操作查看日志&#xff0c;那么&#xff0c;随着业务越来越复杂&#xff0c;企业应用也进入了分布式服务…

YBTOJBZOJ:大根堆(启发式合并)

解析 如果到了链上&#xff0c;本题就是求LIS。 考虑LIS的常见队列做法&#xff0c;其本质就是维护长度为 xxx 的序列的结尾的最小值 qxq_xqx​。 那么在本题尝试如法炮制&#xff0c;对于每个节点&#xff0c;都开一个队列&#xff0c;qxq_xqx​ 表示子树内选了 xxx 个节点后…

Tree UVALive - 8212

Tree UVALive - 8212 题意&#xff1a; 有n个点&#xff0c;k个颜色&#xff0c;每个点都要被染色&#xff0c;相同颜色之间的边算是被该颜色覆盖&#xff0c;问有多少边被所有颜色覆盖 题解&#xff1a; 题目给的是无根树&#xff0c;我们可以将1默认为根然后求所有点的子…

dotnetcore-officeaddin-toolbox : Office 365 Add-in开发人员的工具箱

在上一篇文章&#xff08;.NET Core开源行动&#xff1a;一键创建Excel Add-in&#xff09; 中我给大家展示了一套为Office 365 Add-in开发人员准备的模板库&#xff0c;你可以通过 dotnet new excel & dotnet run 命令即可完成一个新的Add-in的创建和运行。关于如何加载这…

NOMURA Programming Contest 2021(AtCoder Regular Contest 121)

文章目录A - 2nd Greatest DistanceB - RGB MatchingC - Odd Even SortD - 1 or 2E - Directed TreeF - Logical Operations on TreeNOMURA Programming Contest 2021(AtCoder Regular Contest 121)A - 2nd Greatest Distance 大模拟讨论yyds 将点按x,yx,yx,y分别排序 xxx贡献…

F - Heron and His Triangle UVALive - 8206

F - Heron and His Triangle UVALive - 8206 题意&#xff1a; 给你应该n&#xff0c;然后求一个最小的t&#xff0c;问长度为t-1&#xff0c;t&#xff0c;t1所组成的三角形的面积为整数,t>n 题解&#xff1a; 这题我一开始被题目的-1给迷惑了&#xff0c;以为筛出所有…

YBTOJ:最短时间(长链剖分、线段树)

解析 不难得到最优策略&#xff1a;先尽可能的快的送死直到路径畅通无组&#xff0c;然后一口气冲到t点。 现在的难点就在于如何尽可能的快的送掉特定的次数。 不难发现&#xff0c;花费时间关于死亡次数的函数必然是一个下凸包。 设 fx,if_{x,i}fx,i​ 表示子树内距离 xxx 不…

Asp.Net Core对接钉钉群机器人

钉钉作为企业办公越来越常用的软件&#xff0c;对于企业内部自研系统提供接口支持&#xff0c;以此来打通多平台下的数据&#xff0c;本次先使用最简单的钉钉群机器人完成多种形式的消息推送&#xff0c;参考钉钉开发文档中自定义机器人环节&#xff0c;此次尝试所花的时间不多…

转录组无参比对教程

写在前面 2023年将结束&#xff0c;小杜的生信笔记分享个人学习笔记也有2年的时间。在这2年的时间中&#xff0c;分享算是成为工作、学习和生活中的一部分。自己为了运行和维护社群也算花费大量的时间和精力&#xff0c;自己认为还算满意吧。对于个人来说&#xff0c;自己一直…

【学习笔记】左偏树的可持久化(【模板】k短路 / [SDOI2010]魔法猪学院)

文章目录descriptionsolutioncode【模板】k短路 / [SDOI2010]魔法猪学院description iPig 在假期来到了传说中的魔法猪学院&#xff0c;开始为期两个月的魔法猪训练。经过了一周理论知识和一周基本魔法的学习之后&#xff0c;iPig 对猪世界的世界本原有了很多的了解&#xff1…

Infinite Fraction Path UVALive - 8207

Infinite Fraction Path UVALive - 8207 题意&#xff1a; 给你n个数&#xff0c;每个数在0到9之间&#xff0c;每个数的下标一次是0~n-1&#xff0c;然后他所能走到的数为(i^21)%n,i为他本身的下标&#xff0c;然后让你求走n步&#xff0c;每一步的数相连&#xff0c;形成的…

YBTOJ洛谷P4869:出现位置(线性基)

解析 关键结论&#xff1a; 若 nnn 个数组成的线性基大小为 SSS&#xff0c;则其子集异或组成的结果有 2S2^S2S 种&#xff0c;且每种结果都有 2n−S2^{n-S}2n−S 种方案。 证明&#xff1a;考虑 n−Sn-Sn−S 个没有加入线性基的元素的任意一个子集&#xff0c;其异或和为 xxx…

.NET Core开源行动:一键创建Excel Add-in

作为.NET Core开源行动的一部分&#xff0c;我此前已经创建和发布了一套基于.NET Core的Office 365开发模板库&#xff0c;是针对Microsoft Graph开发的场景的&#xff0c;有兴趣可以参考 https://github.com/chenxizhang/dotnetcore-office365dev-templates-msgraph &#xff…

【学习笔记】最小生成树系列的必做经典题

最小生成树系列【模板】最小生成树prim算法kruskal算法Borůvka (Sollin)算法次小生成树最小生成树计数最优比率生成树最小乘积生成树最小度限制生成树最小方差树【模板】最小生成树 prim算法 最小生成树的prim\text{prim}prim类似于最短路的dijkstra\text{dijkstra}dijkstra…

2017 ICPC沈阳区域赛

2017 沈阳区域赛 题号题目难度知识点ABBP FormulaBBridgeCEmpty Convex PolygonsDDefense of the AncientsEFive-round Show HandFHeron and His Triangle铜牌题推式子思维GInfinite Fraction Path快银稳铜dfs剪枝HLegends of the Three KingdomsILittle Boxes签到题大数JNew …

YBROJ洛谷P3211:XOR和路径(线性基,期望dp)

解析 不难想到第一步利用期望线性性逐位考虑。 然后就变成求一个布尔变量的期望了&#xff0c;可以直接转化为求概率。 我一开始的想求从1出发异或和为0/1的概率&#xff0c;然而这个东西在原点1附近的转移特别别扭…老出现概率大于1的迷惑情况。 然后我就不会了 正解是反过…

切题 (problem)(线段树+最大流最小割)

切题 problemdescriptionsolutioncodedescription 在一个神秘的 JOSLFN 上&#xff0c;wzy 和 lqs2015 常年占据着切题榜的 rk1 和 rk2。现在他们在研究 如何快速造题并验题。 分工是这样的&#xff1a;有 n 个 wzy 负责造题&#xff0c;第 i 个 wzy 会造出恰好 ai 道题。有 m…

通过 Azure Pipelines 实现持续集成之docker容器化

IntroAzure DevOps Pipeline 现在对于公开的项目完全免费&#xff0c;这对于开源项目来讲无疑是个巨大的好消息&#xff0c;在 Github 的 Marketplace 里有个 Azure Pipeline&#xff0c;就是微软的 Azure DevOps Pipeline。实现 Docker 容器化的持续集成实现的目标&#xff1a…

YBTOJ:最小数(欧拉函数)

解析 题意可以化为&#xff1a; 8∗10x−19kn08*\frac{10^x-1}{9}kn08∗910x−1​kn0 然后用 8 尽可能的消去 9n9n9n 中的2的幂次&#xff0c;随后问题转化为&#xff1a; 10x≡1(modn′)10^x\equiv 1\pmod {n}10x≡1(modn′) 然后…我就觉得这个是exbsgs了… 但其实完全不用阿…

Acwing 1082. 数字游戏

Acwing 1082. 数字游戏 题意&#xff1a; 现在大家决定玩一个游戏&#xff0c;指定一个整数闭区间 [a,b]&#xff0c;问这个区间内有多少个不降数。 题解&#xff1a; 利用数位dp的套路来做 我们还是利用前缀和来做 我们先求1~n中满足情况的个数 对于一个n位数&#xff0c;…