热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【超好懂的比赛题解】CodeforcesRound#747(Div.2)

title:CodeforcesRound#747(Div.2)date:2021-10-9tags:ACM,练习记录author:Linno题目链接:https:c

title :Codeforces Round #747 (Div. 2)
date : 2021-10-9
tags : ACM,练习记录
author : Linno


在这里插入图片描述

题目链接 :https://codeforces.com/contest/1594

补题进度 :已补完

这次做得可谓是相当差了,A题想复杂、C题调一小时重写才过,E题十分钟写完没交上去。总之还是太菜了。

A-Consecutive Sum Riddle

题意

给一个n,求L和R,使得[L,R]中所有整数加起来等于n。

思路

对于正数,我们知道n=sum[n]-sum[n-1],我们要减去n前面那一坨,只需要取负数的同样位置即可,即L=-n+1,R=n。负数同理。

代码

#include
#define inf 0x3f3f3f3f
#define int long long
using namespace std;
const int maxn=2e5+7;
const int mod&#61;1e9&#43;7;int t,n,L,R;signed main(){cin>>t;while(t--){cin>>n;if(n>0){L&#61;-n&#43;1,R&#61;n;}else L&#61;-n&#43;1,R&#61;n;cout<}

B-Special Numbers

题意

给出n,k&#xff0c;求第k个【n的幂集子集】之和的大小。

思路

考虑二进制&#xff0c;第k大的数其实就是k&#xff0c;普及到其他进制&#xff0c;也不过是把k二进制拆分&#xff0c;k&#61;1010表示第10大的数是n3&#43;n1n^3&#43;n^1n3&#43;n1

代码

#include
#define inf 0x3f3f3f3f
#define int long long
using namespace std;
const int maxn&#61;2e5&#43;7;
const int mod&#61;1e9&#43;7;int fpow(int a,int p){int res&#61;1;while(p){if(p&1) res&#61;res*a%mod;a&#61;a*a%mod;p>>&#61;1;}return res;
}int t,n,k,ans,cnt;signed main(){cin>>t;while(t--){cin>>n>>k;ans&#61;0;cnt&#61;0;while(k){if(k&1){ans&#43;&#61;fpow(n,cnt);ans%&#61;mod;}k>>&#61;1;cnt&#43;&#43;;}cout<}

C-Make Them Equal

题意

求多少次操作可以使得n长的字符串全为ch&#xff0c;每次操作可选择[1,n]中的一个数x&#xff0c;所有除不尽x的位置全部变为ch。

思路

很考察细节。很容易想到最多两次操作就能完成&#xff0c;对于这种情况我们都可以取pos1&#61;n-1,pos2&#61;n&#xff1b;对于1次操作的情况&#xff0c;x所在的位置字符必为ch&#xff0c;那么前面的元素必除不尽&#xff0c;遍历后面的元素即可。对于0次操作&#xff0c;就是所有位置都为ch。

代码

#include
#define inf 0x3f3f3f3f
#define int long long
using namespace std;
const int maxn&#61;3e5&#43;7;
const int mod&#61;1e9&#43;7;int t,n,pos,pos2,vt[maxn];
char ch;
string str;signed main(){cin>>t;while(t--){cin>>n>>ch;cin>>str;int flag&#61;0,flag2&#61;0,cnt&#61;0;for(int i&#61;0;i}

D-The Number of Imposters

题意

给定n个点m条边&#xff0c;每条边u指定v为c&#xff0c;已知c为imposter的点必说真话&#xff0c;c为crewmate的点必说假话&#xff0c;求图中最多有多少个imposter。

思路

相当于黑白涂色了&#xff0c;边的性质为1则两端不同色&#xff0c;否则两端同色。

双向建边跑二分图&#xff0c;取每个联通分块中个数多的答案加起来。

代码

#include
#define inf 0x3f3f3f3f
#define int long long
using namespace std;
const int maxn&#61;2e5&#43;7;
const int maxm&#61;1e6&#43;7;struct E{int nxt,v,f;
}e[maxm];int head[maxn],cnt&#61;0,ans&#61;0;
int vis[maxn],num[3],flag;void addedge(int u,int v,int f){e[&#43;&#43;cnt]&#61;(E){head[u],v,f};head[u]&#61;cnt;
}void dfs(int x,int col){ vis[x]&#61;col;num[col]&#43;&#43;;for(int i&#61;head[x];i;i&#61;e[i].nxt){int to&#61;e[i].v,fang&#61;(col&#61;&#61;2)?1:2;if(e[i].f&#61;&#61;1){if(vis[to]){if(vis[to]!&#61;fang) flag&#61;1;continue;}else dfs(to,fang); }if(e[i].f&#61;&#61;2){if(vis[to]){if(vis[to]!&#61;col) flag&#61;1;continue;}else dfs(to,col);}}
}void init(){ans&#61;0;cnt&#61;0;memset(vis,0,sizeof(vis));memset(head,0,sizeof(head));}signed main(){int t,n,m,u,v;string str;cin>>t;while(t--){cin>>n>>m;init();for(int i&#61;1;i<&#61;m;i&#43;&#43;){cin>>u>>v;cin>>str;if(str&#61;&#61;"imposter") flag&#61;1;else flag&#61;2;addedge(u,v,flag);addedge(v,u,flag);}flag&#61;0;for(int i&#61;1;i<&#61;n;i&#43;&#43;){num[1]&#61;0,num[2]&#61;0;if(!vis[i]){dfs(i,1);ans&#43;&#61;max(num[1],num[2]);}}if(flag) cout<<-1<<"\n";else cout<}

E1-Rubik’s Cube Coloring (easy version)

题意

有n^2-1个节点&#xff0c;每个节点涂上魔方6种颜色中的一种&#xff0c;相邻点颜色必须在魔方中相邻&#xff08;有4种&#xff09;&#xff0c;求种方案数。

思路

第一个节点可以涂6种色&#xff0c;然后对于任意两个相邻的点都只能涂4种色&#xff0c;共2n−12^n-12n1个点&#xff0c;那么答案就是6∗42n−26*4^{2^n-2}642n2

注意对2用快速幂不要取模&#xff0c;不会爆long long。

代码

#include
#define inf 0x3f3f3f3f
#define int long long
using namespace std;
const int maxn&#61;2e5&#43;7;
const int mod&#61;1e9&#43;7;int fpow(int a,int p){int res&#61;1;while(p){if(p&1) res&#61;res*a%mod;a&#61;a*a%mod;p>>&#61;1;}return res;
}int k;signed main(){cin>>k;int tmp&#61;1;for(int i&#61;1;i<&#61;k;i&#43;&#43;) tmp<<&#61;1; int ans&#61;6*fpow(4,tmp-2);cout<}

E2-Rubik’s Cube Coloring (hard version)

题意

在上一题的基础上加多一个限定&#xff0c;就是我们固定住第i个节点的颜色&#xff0c;再求方案数。

思路

真正用到的点只有2000个&#xff0c;可以建立一棵虚树进行dp。

由于是完全二叉树&#xff0c;祖先的个数也只有lognlognlogn个&#xff0c;可以接受。

所有隐式节点或者说没被建立的节点&#xff0c;其值不受固定颜色点的干扰

转移时直接把两个子树乘起来。

代码

不是很会写&#xff0c;抄博客的。

#include
#define int long long
using namespace std;
typedef double db;
const int mod&#61;1e9&#43;7;
const db eps&#61;1e-10;
inline int Max(int x,int y){return x>y?x:y;}
inline int Min(int x,int y){return xinline db Max(db x,db y){return x-y>eps?x:y;}
inline db Min(db x,db y){return x-yinline int Add(int x,int y,int M&#61;mod){return (x&#43;y)%M;}
inline int Mul(int x,int y,int M&#61;mod){return 1ll*x*y%M;}
inline int Dec(int x,int y,int M&#61;mod){return (x-y&#43;M)%M;}
inline int Abs(int x){return x<0?-x:x;}
inline int read(){ //快读 int s&#61;0,w&#61;1;char ch&#61;getchar();while(!isdigit(ch)){if(ch&#61;&#61;&#39;-&#39;)w&#61;-1;ch&#61;getchar();}while(isdigit(ch)){s&#61;s*10&#43;ch-&#39;0&#39;;ch&#61;getchar();}return s*w;
}
inline void write(int x){ //快速输出 if(x<0)putchar(&#39;-&#39;),x&#61;-x;if(x>9)write(x/10);putchar(x%10&#43;&#39;0&#39;);
}
const int N&#61;2e5&#43;10;
int k,n;
int F[61];
string s;
typedef long long ll;
mappa,col,lson,rson,f[4]; //实际上的点编号太大了&#xff0c;用map存
vectorNode;
inline int qpow(int x,int y){ //快速幂 int res&#61;1;while(y){if(y&1)res&#61;Mul(res,x);x&#61;Mul(x,x);y>>&#61;1;}return res;
}
inline int Getdep(int v){return log2(v)&#43;1;} //获取点的深度
void Treat(){for(auto v:Node){if(lson[v]||rson[v])continue;int Dep&#61;k-Getdep(v)&#43;1;if(col[v])f[col[v]][v]&#61;Mul(1,qpow(4,F[Dep]));else for(int i&#61;1;i<&#61;3;&#43;&#43;i)f[i][v]&#61;Mul(2,qpow(4,F[Dep]));}
}
void DP(ll x){if(!lson[x]&&!rson[x])return;if(lson[x])DP(lson[x]);if(rson[x])DP(rson[x]);ll L1&#61;f[1][lson[x]],L2&#61;f[2][lson[x]],L3&#61;f[3][lson[x]],R1&#61;f[1][rson[x]],R2&#61;f[2][rson[x]],R3&#61;f[3][rson[x]];if(!lson[x]){L1&#61;L2&#61;L3&#61;Mul(2,qpow(4,F[k-Getdep(x*2)&#43;1]));}if(!rson[x]){R1&#61;R2&#61;R3&#61;Mul(2,qpow(4,F[k-Getdep(x*2)&#43;1]));}if(!col[x]){f[1][x]&#61;Mul(2,Mul(Add(L2,L3),Add(R2,R3)));f[2][x]&#61;Mul(2,Mul(Add(L1,L3),Add(R1,R3)));f[3][x]&#61;Mul(2,Mul(Add(L2,L1),Add(R2,R1)));}else{if(col[x]&#61;&#61;1)f[1][x]&#61;Mul(Add(L2,L3),Add(R2,R3));if(col[x]&#61;&#61;2)f[2][x]&#61;Mul(Add(L1,L3),Add(R1,R3));if(col[x]&#61;&#61;3)f[3][x]&#61;Mul(Add(L2,L1),Add(R2,R1));}
}
signed main(){k&#61;read();F[1]&#61;0;for(int i&#61;2;i<&#61;60;&#43;&#43;i){F[i]&#61;Add(F[i-1],1,mod-1);F[i]&#61;Mul(F[i],2,mod-1);}n&#61;read();for(int i&#61;1;i<&#61;n;&#43;&#43;i){int pos&#61;read();cin>>s;if(s&#61;&#61;"orange"||s&#61;&#61;"red")col[pos]&#61;1;if(s&#61;&#61;"white"||s&#61;&#61;"yellow")col[pos]&#61;2;if(s&#61;&#61;"blue"||s&#61;&#61;"green")col[pos]&#61;3;while(pos){ //返回向上到父亲的一条链Node.emplace_back(pos);pa[pos]&#61;pos/2;if(pos%2&#61;&#61;0)lson[pos/2]&#61;pos;else rson[pos/2]&#61;pos;pos/&#61;2;}}sort(Node.begin(),Node.end()); //排序所有关键节点 ll root&#61;1;Treat();DP(root);int res&#61;Add(f[3][root],Add(f[1][root],f[2][root]));write(res);putchar(&#39;\n&#39;);return 0;
}

F-Ideal Farm

题意

如果每个盒子都有求并且存在一个区间[l,r]使得∑i&#61;lra[i]&#61;k,其中a[i]表示第i个盒子的球数\sum_{i&#61;l}^ra[i]&#61;k,其中a[i]表示第i个盒子的球数i&#61;lra[i]&#61;k,a[i]i&#xff0c;那么我们就说这个方案是合理的。每组数据给定球数s,盒子数n以及k&#xff0c;问是否无论怎么划分都是合理的。

思路

首先我们向每个盒子加一个球&#xff0c;那么剩下的球&#xff0c;每隔k个盒子就再放k个&#xff0c;这样可以保证前面的区间都不存在方案使之合理&#xff0c;如果到最后依然有球剩下&#xff0c;那么就说明可以构建出一种不合理的方案&#xff0c;否则无论怎样都是合理的。

注&#xff1a;k>s是不合理的&#xff0c;并且特判s&#61;&#61;k是合理的!

代码

#include
#define int long long
using namespace std;int t,s,n,k,flag,tim;signed main(){cin>>t;while(t--){cin>>s>>n>>k;flag&#61;0;if(s&#61;&#61;k){puts("YES");continue;}if(k>s) flag&#61;1;else{s-&#61;n; //每个pen先放一个tim&#61;n/k;s-&#61;tim*k;if(s>&#61;0) flag&#61;1;}if(flag) puts("NO");else puts("YES"); } return 0;
}


推荐阅读
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • BZOJ4240 Gym 102082G:贪心算法与树状数组的综合应用
    BZOJ4240 Gym 102082G 题目 "有趣的家庭菜园" 结合了贪心算法和树状数组的应用,旨在解决在有限时间和内存限制下高效处理复杂数据结构的问题。通过巧妙地运用贪心策略和树状数组,该题目能够在 10 秒的时间限制和 256MB 的内存限制内,有效处理大量输入数据,实现高性能的解决方案。提交次数为 756 次,成功解决次数为 349 次,体现了该题目的挑战性和实际应用价值。 ... [详细]
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • 探讨 jBPM 数据库表结构设计的精要与实践
    探讨 jBPM 数据库表结构设计的精要与实践 ... [详细]
  • 如何使用 net.sf.extjwnl.data.Word 类及其代码示例详解 ... [详细]
  • 本文深入探讨了 iOS 开发中 `int`、`NSInteger`、`NSUInteger` 和 `NSNumber` 的应用与区别。首先,我们将详细介绍 `NSNumber` 类型,该类用于封装基本数据类型,如整数、浮点数等,使其能够在 Objective-C 的集合类中使用。通过分析这些类型的特性和应用场景,帮助开发者更好地理解和选择合适的数据类型,提高代码的健壮性和可维护性。苹果官方文档提供了更多详细信息,可供进一步参考。 ... [详细]
  • 计算 n 叉树中各节点子树的叶节点数量分析 ... [详细]
  • 从零起步:使用IntelliJ IDEA搭建Spring Boot应用的详细指南
    从零起步:使用IntelliJ IDEA搭建Spring Boot应用的详细指南 ... [详细]
  • [TyvjP1050] 动态规划求解最长公共子序列问题
    在解决最长公共子序列问题时,动态规划是一种高效的方法。具体而言,我们使用二维数组 `dp[i][j]` 来表示第一个字符串匹配到第 `i` 位,第二个字符串匹配到第 `j` 位时的最长公共子序列长度。状态转移方程为:当两个字符相等时,`dp[i][j] = dp[i-1][j-1] + 1`;否则,`dp[i][j] = max(dp[i-1][j], dp[i][j-1])`。通过这种方法,我们可以有效地计算出两个字符串的最长公共子序列。 ... [详细]
  • 结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法
    结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法 ... [详细]
  •  DRV8825步进电机驱动控制器与双轴稳定平台的集成应用
    本研究基于TI公司的DRV8825步进电机驱动芯片,将其与现有的双轴稳定平台集成,开发出一种具备自动测量功能的新型平台。该平台通过精确控制步进电机,实现了高精度的定位和测量,适用于多种精密测量和自动化应用场景。关键词:DRV8825,步进电机,双轴稳定平台,自动测量,精密控制 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
  • 在 Android 开发中,通过合理利用系统通知服务,可以显著提升应用的用户交互体验。针对 Android 8.0 及以上版本,开发者需首先创建并注册通知渠道。本文将详细介绍如何在应用中实现这一功能,包括初始化通知管理器、创建通知渠道以及发送通知的具体步骤,帮助开发者更好地理解和应用这些技术细节。 ... [详细]
  • 为了优化直播应用底部聊天框的弹出机制,确保在不同设备上的布局稳定性和兼容性,特别是在配备虚拟按键的设备上,我们对用户交互流程进行了调整。首次打开应用时,需先点击首个输入框以准确获取键盘高度,避免直接点击第二个输入框导致的整体布局挤压问题。此优化通过调整 `activity_main.xml` 布局文件实现,确保了更好的用户体验和界面适配。 ... [详细]
  • Android ListView 自定义 CheckBox 实现列表项多选功能详解
    本文详细介绍了在Android开发中如何在ListView的每一行添加CheckBox,以实现列表项的多选功能。用户不仅可以通过点击复选框来选择项目,还可以通过点击列表的任意一行来完成选中操作,提升了用户体验和操作便捷性。同时,文章还探讨了相关的事件处理机制和布局优化技巧,帮助开发者更好地实现这一功能。 ... [详细]
author-avatar
荆梦梦丶乐园
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有