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题,感觉做出来 ...
随机推荐
- 二:飞凌嵌入式FCU1201
场景一 充电基础设施 场景二 现代机械加工对复杂化.精密化.大型化以及自动化设备的要求不断提高,数控机床设备日益得到广泛应用.数控机床设备对加工质量及效率起着关键乃至核心作用,其造价往往相当昂贵.因此 ...
- 使用DP-Modeler、ModelFun模方软件修复实景三维模型教程
P-Modeler DP-Modeler是武汉天际航自主研发的一款集精细化单体建模与Mesh网格模型修饰于一体的软件.支持三维模型一键水面修复.道路置平.建筑局部修饰.删除底部碎片.植被处理.桥隧 ...
- 80x86汇编—80x86架构
文章目录 计算机如何工作 存储器 逻辑地址到物理地址 寄存器 数据寄存器使用细节 其他知识点细节 堆栈Stack 标志寄存器 中断 汇编入门简单,深入难 使用8086架构进行学习,本章节如果没有学过计 ...
- kubernets之横向伸缩pod与集群节点
一 pod的自动伸缩容的应用背景 在面对负载并发过高的时候,我们或许希望能够提高RS,RC以及Deployment等的replicas的参数来增加pod的cpu,mem等,或者是通过提高每个容器的r ...
- QtCreator 跨平台开发添加动态库教程(以OpenCV库举例)- Windows篇
Qt具有跨平台的特性,即Qt数据结构与算法库本身跨平台和编译脚本(.pro)跨平台.在同时具有Windows下和Linux开发的需求时,最好的建议是使用QtCreator来开发,虽然也可以使用其他 ...
- 【C#】使用ffmpeg image2pipe将图片保存为mp4视频
文章目录需求实现需求在正式开始之前,先介绍下我的需求是怎么样的,基于此需求如何使用ffmpeg实现.仅供参考. 需求点: 将图片保存为视频图片数量不是固定的,是由上游的webrtc传下的帧数据,转成的 ...
- 利用instruments工具查看其它app的性能
1.随便建立一个新的工程文件,profile,进入instruments 2.选中activity,可以看到所有进程,以及其它进程的CPU占用情况
- NOIP模拟68
T1 玩水 解题思路 我们称一个点合法当且仅当 \(s_{i-1,j}=s_{i,j-1}\) . 于是如果一个合法点在它的左上或者右下也可以相邻有一个合法点就是一个合法的图. 树状数组维护即可 co ...
- Java中try catch finally 关键字
异常处理中的几个常用关键字(try catch finally throw throws) 异常处理 java中提供一套异常处理机制,在程序发生异常时,可以执行预先设定好的处理程序, 执行完成后,程序 ...
- 2024-06-08:用go语言,给定三个正整数 n、x和y, 表示城市中的房屋数量以及编号为x和y的两个特殊房屋。 在这座城市中,房屋通过街道相连。对于每个编号i(1 <= i < n), 存在一条
2024-06-08:用go语言,给定三个正整数 n.x和y, 表示城市中的房屋数量以及编号为x和y的两个特殊房屋. 在这座城市中,房屋通过街道相连.对于每个编号i(1 <= i < n) ...