Codeforces Round 941 (Div. 2) cf 941 div2 A~D
每题都有AC代码在伸缩代码框请留意!!
A. Card Exchange
-------------------------------------------题解----------------------------------
选择任意K张相同的牌替换成k-1张任意的牌,也就是说只要有一组牌相同的数量大于k就可以获得最大k-1相同的其他牌,按照这个策略便可以替换掉所有牌最后只剩下k-1张牌。,如果没有牌相同的数量大于等于k那就无法完成第一次替换,也没有后面的替换了
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int a[105];
int main()
{
int t;
cin>>t;
while(t--)
{
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
map<int,int>m;
int jud=0;
for(int i=1;i<=n;i++)
{
m[a[i]]++;
if(m[a[i]]>=k) jud=1;
}
if(jud==1) cout<<k-1<<endl;
else cout<<n<<endl;
}
}
B. Rectangle Filling
-------------------------------------题解-----------------------------------
题意为选定一个矩形的左上角右下角,或者选定一个矩形的右上角和左下角,将这个矩形变为一个颜色,论能否把这个n*m的大矩形全变成一个颜色。
首先判断是不是本来就是纯色如果是直接跳出不是再进行下面的判断,然后先判断最边上的四条线是否是纯色,如果是纯色的话这个题就无法把他们变成纯色(原图不是纯色的情况下)反之则可以,然后特判一下只有单行或者只有单列的情况,有点复杂不过我看其他人的题解好像都不简单
点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10;
char a[505][505];
ll b[2*N];
const int mod=998244353;
vector<ll> v;
int main()
{ ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
ll t;
cin>>t;
while(t--)
{
ll n,m;
cin>>n>>m;
int num=0;
for(ll i=1;i<=n;i++)
{
for(ll j=1;j<=m;j++)
{
cin>>a[i][j];
if(a[i][j]=='W') num++;
}
}
int jud=0;
int num1=0,num2=0;
for(int i=1;i<=n;i++)
{
if(a[i][1]=='W') num1++;
if(a[i][m]=='W') num2++;
}
if((num1==0&&num2==n)||(num1==n&&num2==0)) jud=1;
num1=0,num2=0;
for(int i=1;i<=m;i++)
{
if(a[1][i]=='W') num2++;
if(a[n][i]=='W') num1++;
}
//cout<<num1<<" "<<num2<<endl;
if((num2==0&&num1==m)||(num2==m&&num1==0)) jud=1;
//cout<<jud<<endl;
if(n==1)
{
if(a[1][1]!=a[1][m]) jud=1;
else jud=0;
}
if(m==1)
{
if(a[n][1]!=a[1][1]) jud=1;
else jud=0;
}
if(a[1][1]==a[n][m]) jud=0;
if(a[1][m]==a[n][1]) jud=0;
if(num==n*m||num==0) jud=0;
// cout<<num<<endl;
if(jud!=1) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
C. Everything Nim
-------------------------------------------------题解-----------------------------------------
alice bob 双方有一段时间会被硬控,比如你把给你的数组sort以后 如果出现1 2 3 4 5这样的序列那A每次只能拿一个B也是相同直到双方拿完这一段1 2 3 4 5的序列,已知这个以后,我
们来说一下这个题取胜的策略,比如现在有2 3 5 7 9 A可以控制,让B 每次拿走一堆中的最后一个 比如在这个序列中A拿2 第一堆被拿完第二堆剩一个 B是不是只能拿完第二堆依照这个策
略直到剩最后一堆的时候A依然是先手,他这时候就可以一次拿完最后一堆让A赢得游戏。但是如果是B先手他是不是可以采取相同的策略?答案当然是可以的,那么我们如何判断谁是真正的先
手?就和我们上文中说的“硬控”有关了 所以我们要判断双方被硬控完之后谁是先手,谁便会按照最优策略赢得游戏 ,这里边需要对一整个序列取从1开始的mex 函数| (不懂mex函数的我来解释一下)
mex(1 6 5 3)=2就会出现 2 mex(1 1 4 5 1 4)也是2 mex(2 5 6) =1就是 mex函数取得是从1到n这个顺序中第一个没在序列里出现的数就叫 mex函数。
回到正题,我们只需要整个数组的mex函数(手写)是 奇数还是偶数就好奇数就是结束后A先手,反之则是B先手。完成这个之后需要特判一下, 如果双方被"硬控"完之后数列直接结束了
比如n=5,数组为1 2 3 4 5 那么数列结束之后先手的一方输了,特判完这种情况就可以按照上述的策略判断谁赢了。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef long long ll;
ll a[N];
int main()
{
int t;
cin>>t;
for(int i1=1;i1<=t;i1++)
{
ll n;
cin>>n;
for(ll i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
ll q=1;
ll w=0;
for(ll i=1;i<=n;i++)
{
if(a[i]!=a[i-1]&&a[i]==q) q++;
if(a[i]!=a[i-1])w++;
}
if((q%2==1&&q-1!=w)||(q%2==0&&q-1==w)) cout<<"Alice"<<endl;
else cout<<"Bob"<<endl;
}
}
D D. Missing Subsequence Sum
有难度的构造,能看到这里的都是糕手了,说的尽量简化一些
-----------------------------------题解------------------------------
我么首先把一整个n分成两部分来看 k-1部分(下统称k1),k+1(下统称k2)
k1部分很简单,我们只需要用二进制的思想用 1 2 4 8..2的n次方<=k-1就行 然后最后再补上一个 k-1-2的n次方这样就能全部凑出,然后我通过k==1时候的方法,总结出了以下思路
,按照该方法构造就可以
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
typedef long long ll;
ll a[N];
int main()
{
int t;
cin>>t;
ll o=0;
while(t--)
{ o++;
int n,k;
cin>>n>>k;
// if(o==136) cout<<n<<endl;
ll cnt=0;
ll sum=0;
if(k==1)
{
ll jud=0;
sum=1;
cnt=0;
a[1]=2;
ll p=1;
ll q=2;
while(sum<n)
{
p++;
if(sum<k-1)
{
if(k-1-sum>=pow(2,cnt+1)) cnt++,a[p]=pow(2,cnt),sum+=pow(2,cnt);
else
{
a[p]=k-1-sum;
sum=k-1;
}
}
else
{
if(jud==0)
{
jud=1;
a[p]=k+1;
sum+=k+1;
p++;
a[p]=3*k+1;
p++;
a[p]=2*k+1;
// sum+=3*k+1+2*k+1;
}
else
{
a[p]=pow(2,q)*k+1;
sum+=pow(2,q)*k+1;
q++;
}
// cout<<1<<endl;
}
}
cout<<p<<'\n';
for(ll i=1;i<=p;i++)cout<<a[i]<<" ";
cout<<'\n';
}
else
{ ll jud=0;
sum=1;
cnt=0;
a[1]=1;
ll p=1;
ll q=2;
while(sum<n)
{
p++;
if(sum<k-1)
{
if(k-1-sum>=pow(2,cnt+1)) cnt++,a[p]=pow(2,cnt),sum+=pow(2,cnt);
else
{
a[p]=k-1-sum;
sum=k-1;
}
}
else
{
if(jud==0)
{
jud=1;
a[p]=k+1;
sum+=k+1;
p++;
a[p]=3*k+1;
p++;
a[p]=2*k+1;
// sum+=3*k+1+2*k+1;
}
else
{
a[p]=pow(2,q)*k+1;
sum+=pow(2,q)*k+1;
q++;
}
// cout<<1<<endl;
}
}
cout<<p<<'\n';
for(ll i=1;i<=p;i++)cout<<a[i]<<" ";
cout<<'\n';
}
}
}
Codeforces Round 941 (Div. 2) cf 941 div2 A~D的更多相关文章
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- 【cf比赛记录】Codeforces Round #601 (Div. 2)
Codeforces Round #601 (Div. 2) ---- 比赛传送门 周二晚因为身体不适鸽了,补题补题 A // http://codeforces.com/contest/1255/p ...
- 【cf比赛记录】Codeforces Round #600 (Div. 2)
Codeforces Round #600 (Div. 2) ---- 比赛传送门 昨晚成绩还好,AC A,B题,还能上分(到底有多菜) 补了C.D题,因为昨晚对C.D题已经有想法了,所以补起题来也快 ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
- Codeforces Round #378 (Div. 2) D题(data structure)解题报告
题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...
- Codeforces Round #253 (Div. 1) (A, B, C)
Codeforces Round #253 (Div. 1) 题目链接 A:给定一些牌,然后如今要提示一些牌的信息,要求提示最少,使得全部牌能够被分辨出来. 思路:一共2^10种情况,直接暴力枚举,然 ...
- Codeforces Round #257 (Div. 1)A~C(DIV.2-C~E)题解
今天老师(orz sansirowaltz)让我们做了很久之前的一场Codeforces Round #257 (Div. 1),这里给出A~C的题解,对应DIV2的C~E. A.Jzzhu and ...
- CF922 CodeForces Round #461(Div.2)
CF922 CodeForces Round #461(Div.2) 这场比赛很晚呀 果断滚去睡了 现在来做一下 A CF922 A 翻译: 一开始有一个初始版本的玩具 每次有两种操作: 放一个初始版 ...
- Codeforces Round #549 (Div. 1)
今天试图用typora写题解 真开心 参考 你会发现有很多都是参考的..zblzbl Codeforces Round #549 (Div. 1) 最近脑子不行啦 需要cf来缓解一下 A. The B ...
- Codeforces Round #525 (Div. 2)
Codeforces Round #525 (Div. 2) 哎,忍不住想吐槽一下,又要准备训练,又要做些无聊的事,弄得我都想退出了. 好好的训练不好么???? 只能做出两道水题,其实C题,感觉做出来 ...
随机推荐
- easyExcel多行表头设定不同样式和特定单元格设定样式的实现
前言 有个需求,需要设置Excel导出的样式,样式如下图所示,有三个表头行,第一个表头行需要加粗和灰色背景,另外两个表头行使用另外的样式,并且当测试结果单元格出现x或者未通过的时候,设置其为红色字体. ...
- ansible系列(30)--ansible的role详解
目录 1. Ansible Roles 1.1 roles目录结构 1.2 roles编写步骤 1.2.1 编写基本的roles 1.2.2 roles的调用 1.2.3 roles中使用变量 1.2 ...
- JavaScript 实现前端文件下载
A.download HTML5的A标签有一个download属性,可以告诉浏览器下载而非预览文件,很实用,参考链接:http://www.zhangxinxu.com/wordpress/2016/ ...
- Hugging Face ZeroGPU 计划正式发布—提供价值一千万美元的免费共享 GPU
在人工智能技术领域,GPU 资源一直是推动研究和应用的关键因素.然而,GPU 的成本和可用性对于许多研究人员和开发者来说却是一个显著的障碍. 在 Hugging Face,我们希望人工智能技术可以更加 ...
- Java面试题:SpringBoot异常捕获,让程序“免疫”一切错误!
在Spring Boot应用程序中,捕获全局异常是一个重要的方面,它可以帮助我们处理在应用程序运行时可能发生的各种错误情况.通过适当地捕获和处理这些异常,我们可以改善用户体验并及时采取必要的措施. 使 ...
- Istio(七):ServiceEntry,sidecar,Envoy Filter
目录 一.模块概览 二.系统环境 三.ServiceEntry 四.sidecar 4.1 Sidecar 4.2 工作负载选择器 4.3 入口和出口监听器 五.Envoy Filter 5.1 En ...
- 支持表格识别,PaddleOCRSharp最新发布
PaddleOCRSharp 2.3.0已经发布nuget包. 项目开源地址:https://gitee.com/raoyutian/paddle-ocrsharp 2.3.0更新内容: 1.增加表格 ...
- nfs 加 auto 自动挂载/etc/fstab;autofs
一,用/etc/fstab 1.在/etc/fstab里面添加一条配置文件 vim /etc/fstab #在里面添加一条配置信息 192.168.200.10:/opt/share2 /mnt/sh ...
- SELinux 安全模型——TE
首发公号:Rand_cs SELinux 安全模型--TE 通过前面的示例策略,大家对 SELinux 应该有那么点感觉认识了,从这篇开始的三篇文章讲述 SELinux 的三种安全模型,会涉及一些代码 ...
- kettle从入门到精通 第十二课 kettle java代码过滤记录、利用Janino计算Java表达式
1.下图通过简单的示例讲解了根据java代码过滤记录和利用Janino计算Java表达式两个组件. 2.根据java代码过滤记录 1)步骤名称:自定义 2)接收匹配的行的步骤(可选):下面条件(jav ...