Codeforces Round #601 (Div. 2)

传送门

文章目录

  • A.Changing Volume
    • 题意:
    • 思路:
  • B. Fridge Lockers
    • 题意:
    • 思路:
  • C. League of Leesins
    • 题意:
    • 思路:
  • D. Feeding Chicken
    • 题意:
    • 思路:
  • E1 E2. Send Boxes to Alice

A.Changing Volume

题意:

给你六个操作,问把aaa变成bbb最少几步。

思路:

因为操作是对称的,所以转换成把小的数变成大的数最少要几步。首先依次递增5,让后再根据1,2,51,2,51,2,5mod5\bmod \ \ 5mod  5后的数即可。

//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int a,b;int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);int _; scanf("%d",&_);while(_--){scanf("%d%d",&a,&b);if(a>b) swap(a,b);int c=b-a;int ans=0;ans+=c/5,c%=5;if(c>=1&&c<=2) ans++;else if(c>=3&&c<=4) ans+=2;printf("%d\n",ans);}return 0;
}
/**/

B. Fridge Lockers

题意:

nnn个冰箱,让你连mmm条边,使得费用最小且每个冰箱都是私人的,这里定义冰箱是私人的当且仅当这个冰箱的度数>1>1>1

思路:

首先需要特判n=2n=2n=2的情况。
注意到m<=nm<=nm<=n,考虑当m<nm<nm<n的时候,最多构成一棵树,这样也是不能满足的。所以只有m==nm==nm==n的情况才能满足,也就是首尾相接,都练起来即可。
当时没看到m<=nm<=nm<=n,所以写的麻烦了。

//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n,m;
int ans;
vector<PII>v;
struct Node
{int id,val;bool operator < (const Node &w) const{return val<w.val;}
}a[N];bool check()
{if(m<n) return false;ans=0;for(int i=1;i<=n;i++) v.pb({a[i].id,a[(i+1)>n? 1:(i+1)].id}),ans+=a[i].val+a[(i+1)>n? 1:(i+1)].val;m-=n;for(int i=1;m&&i<=n;i++)for(int j=i+2;m&&j<=n;j++)v.pb({a[i].id,a[j].id}),ans+=a[i].val+a[j].val;return true;
}int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);int _; scanf("%d",&_);while(_--){scanf("%d%d",&n,&m); v.clear();for(int i=1;i<=n;i++) scanf("%d",&a[i].val),a[i].id=i;if(n==2){puts("-1");continue;}sort(a+1,a+1+n);if(check()){printf("%d\n",ans);for(int i=0;i<v.size();i++) printf("%d %d\n",v[i].X,v[i].Y);}else puts("-1");}return 0;
}
/**/

C. League of Leesins

题意:

给一个长度为nnn的排列ppp,让后取排列中相邻的n−2n-2n2个三元组,放到集合qqq中,三元组内的顺序可以变化,三元组间相对位置可以变化,让后给你n−2n-2n2个三元组,让你还原一个可能的排列ppp

思路:

首先注意到一个排列取三元组的话,首位和末位都只能出现一次,可以从这个入手,先找到出现一次的位置,把它放在开头,让后这个时候能唯一确定开头的三元组是哪个,以及确定首元素。那么开头三元组剩下两个元素位置怎么确定呢?我们发现出现次数少的哪个一定在出现次数多的哪个的后面,比如cnti<=cntjcnt_i<=cnt_jcnti<=cntj,那么三元组就是[first,i,j][first,i,j][first,i,j],不懂的可以自己模拟一下。接下来我们唯一确定了第一个三元组,让后后面可以根据前一个的最后两个值来调整位置,也是唯一确定的,一直递推下去就好啦。
起了一些阴间变量名,写错好几个地方。。

//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n;
int cnt[N];
map<PII,int>mp1,mp2;
struct Node
{int x[3];
}a[N];void add(PII x,int id)
{if(mp1.count(x)&&mp2.count(x)) while(1);if(mp1.count(x)) mp2[x]=id;else mp1[x]=id;
}int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);scanf("%d",&n);for(int i=1;i<=n-2;i++){scanf("%d%d%d",&a[i].x[0],&a[i].x[1],&a[i].x[2]),cnt[a[i].x[0]]++,cnt[a[i].x[1]]++,cnt[a[i].x[2]]++;int x,y,z; x=a[i].x[0],y=a[i].x[1],z=a[i].x[2];add({min(x,y),max(x,y)},i); add({max(x,y),min(x,y)},i);add({min(x,z),max(x,z)},i); add({max(x,z),min(x,z)},i);add({min(z,y),max(z,y)},i); add({max(z,y),min(z,y)},i);sort(a[i].x,a[i].x+3);}int st=0; PII pre;for(int i=1;i<=n;i++) if(cnt[i]==1) { st=i; break; }for(int i=1;i<=n-2;i++){if(a[i].x[0]==st||a[i].x[1]==st||a[i].x[2]==st){if(a[i].x[1]==st) swap(a[i].x[0],a[i].x[1]);else if(a[i].x[2]==st) swap(a[i].x[2],a[i].x[0]),swap(a[i].x[1],a[i].x[2]);if(cnt[a[i].x[1]]<cnt[a[i].x[2]]) pre={a[i].x[1],a[i].x[2]};else pre={a[i].x[2],a[i].x[1]},swap(a[i].x[1],a[i].x[2]);st=i;break;}}vector<int>ans; ans.pb(st);for(int i=1;i<=n-3;i++){if(mp1[pre]==st){st=mp2[pre];ans.pb(st);}else{st=mp1[pre];ans.pb(st);}int tem=0;for(int i=0;i<3;i++) if(a[st].x[i]!=pre.X&&a[st].x[i]!=pre.Y) tem=a[st].x[i];a[st].x[0]=pre.X,a[st].x[1]=pre.Y; a[st].x[2]=tem;pre={a[st].x[1],tem};}for(int i=0;i<ans.size();i++){int id=ans[i];if(i==0) printf("%d %d %d ",a[id].x[0],a[id].x[1],a[id].x[2]);else printf("%d ",a[id].x[2]);}return 0;
}
/**/

D. Feeding Chicken

题意:

给一个字符矩阵,′.′'.'.是空地,′R′'R'R是粮食。现在要给kkk个鸡分配位置,要求每个鸡分配的位置是连通的,且每个鸡分配的粮食个数最大值与最小值差最小。

思路:

这个是个大水题,我们可以直接算一下能否给每个鸡分配等量的‘R’‘R’R个数,不能的话把多余的拿出来等量分给一些鸡就行了。还需要保证联通,我们只需要像跑类似蛇一样的路径即可(imod2==1i\bmod 2==1imod2==1就从左到右,否则从右到左)。
最后有个比较坑的就是题目中′R′'R'R是跟你输出的′R′'R'R是一样的,可以把原题中′R′'R'R修改为其他字符,比如′[′'['[

//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=110,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int tot,n,m,k;
char s[N][N];
map<int,char>mp;int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);for(int i=1;i<=26;i++) mp[i]='a'+i-1;for(int i=1,j=27;i<=26;i++,j++) mp[j]='A'+i-1;for(int i=0,j=53;i<=9;i++,j++) mp[j]='0'+i;int _; scanf("%d",&_);while(_--){tot=0; int cnt=0;scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=n;i++){scanf("%s",s[i]+1);for(int j=1;j<=m;j++) if(s[i][j]=='R') cnt++,s[i][j]='[';}int num=cnt/k;for(int i=1;i<=cnt%k;i++){char ch=mp[++tot]; int c=num+1;for(int i=1;i<=n&&c;i++){if(i%2==1){for(int j=1;j<=m&&c;j++){if(s[i][j]!='.'&&s[i][j]!='[') continue;if(s[i][j]=='[') c--;s[i][j]=ch;}}else{for(int j=m;j>=1&&c;j--){if(s[i][j]!='.'&&s[i][j]!='[') continue;if(s[i][j]=='[') c--;s[i][j]=ch;}}}}for(int i=1;i<=k-cnt%k;i++){char ch=mp[++tot]; int c=num;for(int i=1;i<=n&&c;i++){if(i%2==1)for(int j=1;j<=m&&c;j++){if(s[i][j]!='.'&&s[i][j]!='[') continue;if(s[i][j]=='[') c--;s[i][j]=ch;}elsefor(int j=m;j>=1&&c;j--){if(s[i][j]!='.'&&s[i][j]!='[') continue;if(s[i][j]=='[') c--;s[i][j]=ch;}}}char ch=mp[tot];for(int i=1;i<=n;i++){if(i%2==1)for(int j=1;j<=m;j++){if(s[i][j]!='.'&&s[i][j]!='[') continue;s[i][j]=ch;}elsefor(int j=m;j>=1;j--){if(s[i][j]!='.'&&s[i][j]!='[') continue;s[i][j]=ch;}}for(int i=1;i<=n;i++) printf("%s\n",s[i]+1);}return 0;
}
/**/

E1 E2. Send Boxes to Alice

E1简单点,直接质因子分解,以质因子为组,取中间的位置,都往中间靠就好啦。
题解

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

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

相关文章

CF1375G. Tree Modification(贪心,黑白染色)

CF1375G. Tree Modification Solution 假设我们取定了根&#xff0c;那么只可能从深度大的点接到深度小的点&#xff0c;我们每次取一个高度为2的子树接到该子树的父亲&#xff0c;这样取一定不劣&#xff0c;操作次数相当于是偶数深度点&#xff08;根深度为0&#xff09;的…

P3168 [CQOI2015]任务查询系统 主席树 + 差分

传送门 题意&#xff1a; 思路&#xff1a; 题目中(si,ei,pi)(s_i,e_i,p_i)(si​,ei​,pi​)转换成操作即为在[si,ei][s_i,e_i][si​,ei​]区间内加上pip_ipi​的优先级&#xff0c;让后查询的话就是查询第xix_ixi​秒优先级最小的kik_iki​个任务的优先级之和。可知这两个操…

asp.net core 系列之Performance的 Response compression(响应压缩)

本文&#xff0c;帮助了解响应压缩的一些知识及用法(大部分翻译于官网,英文水平有限,不准确之处,欢迎指正)。什么是响应压缩&#xff1f;响应压缩简单的说就是为了减少网络带宽&#xff0c;而把返回的响应压缩&#xff0c;使之体积缩小&#xff0c;从而加快响应的一种技术(个人…

CF1516E. Baby Ehab Plays with Permutations(组合数学)

CF1516E. Baby Ehab Plays with Permutations Solution 因为组合水平不行所以只弄出来一个O(k4)O(k^4)O(k4)的做法&#xff08;虽然随便改改可能就O(k3log⁡k)O(k^3\log k)O(k3logk)或者O(k3)O(k^3)O(k3)了&#xff09;而且因为没想清楚而自闭了很久&#xff0c;从而导致摸yu…

Codeforces Round #603 (Div. 2) E. Editor 线段树维护括号序列

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 首先一个括号序列合法的条件可以转化成两个(左括号代价为111&#xff0c;右括号代价为−1-1−1)&#xff1a; (1) 左括号个数等于右括号个数。 (2) 括号的前缀和非负。 所以我们直接用线段…

从ASP.NET Core 3.0 preview 特性,了解CLR的Garbage Collection

前言在阅读这篇文章&#xff1a;Announcing Net Core 3 Preview3的时候&#xff0c;我看到了这样一个特性&#xff1a;Docker and cgroup memory LimitsWe concluded that the primary fix is to set a GC heap maximum significantly lower than the overall memory limit as …

CF1386C. Joker(整体二分)

CF1386C. Joker Solution 难得有一道可以整体二分的题。 有一个基本的思路是&#xff1a;考虑求出AnsiAns_iAnsi​表示最小的右端点&#xff0c;满足[1,i]∪[Ansi,m][1,i]\cup[Ans_i,m][1,i]∪[Ansi​,m]中存在奇环。 考虑到AnsiAns_iAnsi​序列是非减的&#xff0c;因此我…

asp.net core使用serilog将日志推送到腾讯云日志服务

为什么是serilog&#xff1f;Serilog是 .NET 中最著名的结构化日志类库。基于日志事件log events&#xff0c;而不是日志消息log message。你可以将日志事件格式化为控制台的可读文本或者可以将相同的事件格式化为JSON并将其发送到远程日志服务器。应用程序中的日志语句会创建L…

P5787 二分图 /【模板】线段树分治

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 线段树分治就是在线段树上进行遍历&#xff0c;到每个点都加上它对子节点的贡献&#xff0c;最后到叶子节点的时候算一下贡献。 对于这个题先考虑维护二分图的话&#xff0c;可以用扩展域并…

CF1413F. Roads and Ramen(树的直径,线段树)

CF1413F. Roads and Ramen Solution 感觉这个套路也见过许多次了&#xff1f;大概这种奇奇怪怪的树上最长路径的题都得往直径靠一靠。 大概有个结论是&#xff1a;存在一个最优路径使得其起始点和直径起始点有交。 然后我们只需要求出一个直径的起始点A,BA,BA,B&#xff0c…

微软发布 VS Code Java 安装程序,一键安装所有 Java 开发环境

北京时间 2019 年 6 月 14 日 &#xff0c;微软发布了 VS Code Java 安装程序&#xff0c;方便开发者能一键安装所有 Java 开发环境。几乎是在三年前&#xff0c;在微软苏黎世办公室的编程马拉松中&#xff0c;来自 Red Hat&#xff0c;IBM&#xff0c;Codenvy 和 Microsoft 的…

CF1361C. Johnny and Megan‘s Necklace(构造,欧拉回路,传递闭包)

CF1361C. Johnny and Megan’s Necklace Solution 真duliu&#xff0c;快做吐了。。。 刚开始想了一个假做法&#xff08;但前面还是很真的&#xff09;。 假的做法大概是你发现这个东西具有传递性&#xff0c;因此你考虑把aia_iai​翻转后在后面补0直到20位之后&#xff0…

Codeforces Round #601 (Div. 2) E2. Send Boxes to Alice (Hard Version) 思维 + 质因子

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 大体题意跟easyeasyeasy版本差不多&#xff0c;就是hardhardhard版本的aaa范围更大。见这里Codeforces Round #601 (Div. 2) 思路&#xff1a; 首先还是考虑质因子分解&#xff0c;因为一个数被分成以xyxy…

[译]C#中的条件断点

这只是你们许多人中可能使用的一个简单技巧。这是一个小但非常强大的技巧&#xff0c;在你调试大型代码库时尤其有用。这是条件断点的概念。正如名称本身所暗示的那样&#xff0c;只有在满足某个条件时才会设置被击中的断点。它也很容易实现。创建一个新的应用程序并设置一个普…

CF1090F - How to Learn You Score(构造)

CF1090F - How to Learn You Score Solution 很不戳的构造题。 首先观察数据范围&#xff1a;n∈[5,1000]n\in[5,1000]n∈[5,1000]&#xff0c;这启发我们什么&#xff1f;n5n5n5的时候解是唯一的&#xff0c;因此我们可以把nnn切成若干段长度为555的段&#xff0c;每一段分…

前菜---二叉树+堆的小练习

目录 前言&#x1f3dc;️ 1. 二叉树性质总结⛱️ 1.2 性质3⏰ 2. 二叉树性质小练习&#x1f3d5;️ 3. 答案解析&#x1f4a1; 4. 堆概念结构小练习&#x1fa94; 5. 答案解析&#x1f9ff; 6. 前/中/后/层序遍历小练习&#x1f52b; 7. 答案解析&#x1f9fa; 后语…

牛客 CCA的区间 dp + 补集转移

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 首先翻转一个区间意味着可以将任意两段不相交的区间组合&#xff0c;所以问题变成了选两端不相交的区间&#xff0c;使得合并后区间和最大。那么我们就处理出来区间&#xff0c;让后进行转…

ASP.NET Core IP 请求频率限制

在网站或API应用中&#xff0c;我们为了防止无聊人士或恶意攻击&#xff0c;通常希望屏蔽某一IP短时间的内高频率请求。在ASP.NET Core中&#xff0c;限制IP请求频率非常简单&#xff0c;我们来看看吧。轮子一个.NET Core 目前的生态发展十分迅猛&#xff0c;轮子也越来越多。只…

2019 秦皇岛 I - Invoker Gym - 102361I dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 累了&#xff0c;略。 思路&#xff1a; 将这101010个串打乱顺序&#xff0c;每个串最多有666种情况&#xff0c;全部写出来&#xff0c;让后连边。最后直接在转移的时候分别从上一个字符的666个状态转移就…

CF1016G. Appropriate Team(Pollard-pho,FWT,数论)

CF1016G. Appropriate Team Solution 相当于选出的两个数需要满足不存在一个质因子ppp&#xff0c;aia_iai​在ppp的指数比XXX多&#xff0c;aja_jaj​在ppp的指数比YYY少。 我们用Pollard−phoPollard-phoPollard−pho求出YYY所有最多151515个质因数&#xff0c;然后把所有…