每题都有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的更多相关文章

  1. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  2. 【cf比赛记录】Codeforces Round #601 (Div. 2)

    Codeforces Round #601 (Div. 2) ---- 比赛传送门 周二晚因为身体不适鸽了,补题补题 A // http://codeforces.com/contest/1255/p ...

  3. 【cf比赛记录】Codeforces Round #600 (Div. 2)

    Codeforces Round #600 (Div. 2) ---- 比赛传送门 昨晚成绩还好,AC A,B题,还能上分(到底有多菜) 补了C.D题,因为昨晚对C.D题已经有想法了,所以补起题来也快 ...

  4. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  5. Codeforces Round #378 (Div. 2) D题(data structure)解题报告

    题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...

  6. Codeforces Round #253 (Div. 1) (A, B, C)

    Codeforces Round #253 (Div. 1) 题目链接 A:给定一些牌,然后如今要提示一些牌的信息,要求提示最少,使得全部牌能够被分辨出来. 思路:一共2^10种情况,直接暴力枚举,然 ...

  7. 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 ...

  8. CF922 CodeForces Round #461(Div.2)

    CF922 CodeForces Round #461(Div.2) 这场比赛很晚呀 果断滚去睡了 现在来做一下 A CF922 A 翻译: 一开始有一个初始版本的玩具 每次有两种操作: 放一个初始版 ...

  9. Codeforces Round #549 (Div. 1)

    今天试图用typora写题解 真开心 参考 你会发现有很多都是参考的..zblzbl Codeforces Round #549 (Div. 1) 最近脑子不行啦 需要cf来缓解一下 A. The B ...

  10. Codeforces Round #525 (Div. 2)

    Codeforces Round #525 (Div. 2) 哎,忍不住想吐槽一下,又要准备训练,又要做些无聊的事,弄得我都想退出了. 好好的训练不好么???? 只能做出两道水题,其实C题,感觉做出来 ...

随机推荐

  1. Django国际化与本地化指南

    title: Django国际化与本地化指南 date: 2024/5/12 16:51:04 updated: 2024/5/12 16:51:04 categories: 后端开发 tags: D ...

  2. C语言:ACLLIB图形库——如何搭建环境(附三个文件代码)

    看一下我配置完的运行结果: 1)首先创建一个项目. 2)选择win项目和C语言 3)然后找到你保存项目的文件夹里面拷贝两个.c和.h文件,两个文件代码我附在最后. 4)现在还不能用,找到项目属性 5) ...

  3. 13-flask博客项目之restful api详解1-概念

    一 传统的开发模式 前后端分类概念 前端只需要独立编写客户端代码,后端也只需要独立编写服务端代码提供数据接口即可前端通过AJAX请求来访问后端的数据接口,将Model展示到View中即可 前后端开发者 ...

  4. springboot 整合 recketMQ 详细步骤

    前提 RocketMQ的部署环境可用 1 依赖包 <dependency> <groupId>org.apache.rocketmq</groupId> <a ...

  5. C# 使用 NPOI 导出excel 单击单元格背景变黑色的解决办法

    需要手动指定单元格的背景色为一种颜色, 特别注意,我在使用 var color=new XSSFColor(new color...)创建的颜色,即使设置成其他颜色,查看样式属性中,发现color.i ...

  6. 安利一个好用的IDEA插件 object-helper-plugin

    更多精彩博文请关注:听到微笑的博客 一. 插件背景 object-helper 插件是一个日常开发工具集插件,提供丰富的功能,最开始是基于 GenerateO2O 插件开发而来,它提供了对象之间值拷贝 ...

  7. Django视图的请求与响应

    1.请求对象 (1)请求方式 print(request.method) (2)请求数据 (3)请求路径 # HttpRequest.path: 表示请求的路径(不含get参数) # HttpRequ ...

  8. 开源Blazor UI组件库精选:让你的Blazor项目焕然一新!

    今天给大家推荐一些开源.美观的Blazor UI组件库,这些优秀的开源框架和项目不仅能够帮助开发者们提高开发效率,还能够为他们的项目带来更加丰富的用户体验. 注:排名不分先后,都是十分优秀的开源框架和 ...

  9. 解决老旧电脑在win7中浏览器访问https网站出现的Let‘sEncrypt证书过期的问题

    原因LetsEncrypt证书未过期,但是其顶级ca根证书 "DST Root CA X3"在2021-09-01过期了,老旧设备上的win系统会被影响到. 解决步骤下载三张Let ...

  10. 从零开始写 Docker(十六)---容器网络实现(上):为容器插上”网线”

    本文为从零开始写 Docker 系列第十六篇,利用 linux 下的 Veth.Bridge.iptables 等等相关技术,构建容器网络模型,为容器插上"网线". 完整代码见:h ...