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题,感觉做出来 ...
随机推荐
- ES Monitoring 整理笔记
Monitoring是elastic stack的监控模块,监控信息存在es索引中,并且可以通过kibana进行可视化的展示.(收集监控数据的方式从6.5版本起由Collectors-Exporter ...
- ansible(19)--ansible的playbook
目录 1. playbook简介 2. playbook编写规范 2.1 YAML语法规范 2.2 YAML语法要素 2.3 Playbook核心元素 2.4 Playbook的基础组件 3 Play ...
- HTML页面 IE 兼容性设置
网页第一行: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/html ...
- java复制指定文件
package com.cn.file; import org.junit.Test; import java.io.FileInputStream; import java.io.FileNotFo ...
- vue特殊attribute-ref
vue.js中文社区文档:ref 被用来给元素或子组件注册引用信息.引用信息将会注册在父组件的 $refs 对象上.如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素:如果用在子组件上,引 ...
- 八大远程控制软件,完美替代Teamviewer
理想情况下,最好的远程桌面软件应该物有所值,同时为用户提供快速.安全和可靠的远程连接.还应该有一套强大的解决方案,提供高级报告和增强功能.跨平台支持和通信. TeamViewer 拥有超过 25 亿的 ...
- C 语言编程 — 异常处理
目录 文章目录 目录 前文列表 异常处理 perror() 和 strerror() 输出异常信息 程序退出状态 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基 ...
- C 语言编程 — 运算符
目录 文章目录 目录 前文列表 运算符 算数运算符 自增.自减运算符 比较运算符 逻辑运算符 位运算符 赋值运算符 逗号运算符 sizeof 运算符 杂项运算符 运算符的优先级 前文列表 <程序 ...
- .NET快速实现网页数据抓取
前言 今天我们来讲讲如何使用.NET开源(MIT License)的轻量.灵活.高性能.跨平台的分布式网络爬虫框架DotnetSpider来快速实现网页数据抓取功能. 注意:为了自身安全请在国家法律允 ...
- 基于 ESP8266_RTOS_SDK 实现声控灯
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdint.h&g ...