Codeforces Round #571 (Div. 2)

日常被tanao_大佬带飞,我AC了A和C(B题没了。。。否则tanao_大佬肯定把我吊打)

A. Vus the Cossack and a Contest

Vus the Cossack holds a programming competition, in which \(n\) people participate. He decided to award them all with pens and notebooks. It is known that Vus has exactly \(m\) pens and \(k\) notebooks.

Determine whether the Cossack can reward all participants, giving each of them at least one pen and at least one notebook.

Input

The first line contains three integers \(n\), \(m\), and \(k\) (1≤n,m,k≤100) — the number of participants, the number of pens, and the number of notebooks respectively.

Output

Print "Yes" if it possible to reward all the participants. Otherwise, print "No".

You can print each letter in any case (upper or lower).

Div.2的A标准打卡题难度,翻译:

给你整数n、m、k,判断m和k是否都大于等于n

这好像都比noip2018pj的t1都要简单。。。

直接if完事

Code:

#include <cstdio>
#include <cctype>
#define reg register
using namespace std;
template <class t> inline void rd(t &s)
{
s=0;
reg char c=getchar();
while(!isdigit(c))
c=getchar();
while(isdigit(c))
s=(s<<3)+(s<<1)+(c^48),c=getchar();
return;
}
signed main(void)
{
int n,m,k;
rd(n);rd(m);rd(k);
if(m>=n&&k>=n)
puts("Yes");
else
puts("No");
return 0;
}

C. Vus the Cossack and Strings

Vus the Cossack has two binary strings, that is, strings that consist only of "0" and "1". We call these strings a and b. It is known that |b|≤|a|, that is, the length of b is at most the length of a.

The Cossack considers every substring of length |b| in string a. Let's call this substring c. He matches the corresponding characters in b and c, after which he counts the number of positions where the two strings are different. We call this function f(b,c).

For example, let b=00110, and c=11000. In these strings, the first, second, third and fourth positions are different.

Vus the Cossack counts the number of such substrings c such that f(b,c) is even.

For example, let a=01100010 and b=00110. aa has four substrings of the length |b|: 01100, 11000, 10001, 00010.

  • f(00110,01100)=2;
  • f(00110,11000)=4;
  • f(00110,10001)=4;
  • f(00110,00010)=1.

Since in three substrings, f(b,c)f(b,c) is even, the answer is 33.

Vus can not find the answer for big strings. That is why he is asking you to help him.

Input

The first line contains a binary string a \((1≤|a|≤10^6)\) — the first string.

The second line contains a binary string b \((1≤|b|≤|a|)\) — the second string.

Output

Print one number — the answer.

input1

01100010
00110

output1

3

input2

1010111110
0110

output2

4

人话:

给你两个个二进制串a和b,b的长度小于等于a,将a的每个长度位b长度的连续子序列拿出来和a进行f操作,f操作就是比对两个串有几位不同,如果这个数是偶数,那么答案加一

样例1的解释在题面里有了

那么直接开始分析吧:

这个f操作一看就知道是异或然后统计1的个数,但是直接做或者bitset都会超时,那么

这题看到偶数就应该想到奇偶性,那么奇偶性与 和以及异或和 是有关的,于是。。。

把a串的前缀和求出来,再把b串的异或和求出来

然后看看,我们只要得知f结果的奇偶性就好了,并不要得知他是多少

所以,a的前缀和可以帮我们知道a的一段区间内和的奇偶性,我们也可以得知这段区间内1的出现次数的奇偶性

那么,b的异或和可以帮助我们知道b串中1的出现次数的奇偶性

那么,如果这两个奇偶性相同时,那么我们就得知他们异或后的结果内1的个数是偶数个

\(e.g.\):我们定义g函数为区间内1出现次数的奇偶性(1奇,0偶)

\(g(10101)=1\), \(g(10010)=0\), 所以它们异或后的结果1的个数一定为奇数个

检验:\(10101 xor 10010 = 00111\)

那么代码就有了,Code:

#include <cstdio>
#include <cctype>
#include <cstring>
#include <bitset>
#define reg register
using namespace std;
const int MaxN=1000001;
template <class t> inline void rd(t &s)
{
s=0;
reg char c=getchar();
while(!isdigit(c))
c=getchar();
while(isdigit(c))
s=(s<<3)+(s<<1)+(c^48),c=getchar();
return;
}
char ia[MaxN],ib[MaxN];
int a[MaxN],b[MaxN],f[MaxN],g[MaxN];
int lena,lenb;
signed main(void)
{
scanf("%s%s",ia+1,ib+1);
lena=strlen(ia+1),lenb=strlen(ib+1);
// printf("%d %d",lena,lenb);
for(int i=1;i<=lena;++i)
{
a[i]=(ia[i]=='1')?1:0;
f[i]=f[i-1]+a[i];
}
for(int i=1;i<=lenb;++i)
{
b[i]=(ib[i]=='1')?1:0;
g[i]=g[i-1]^b[i];
}
reg int ans=0,k,u;
for(int i=lenb;i<=lena;++i)
{
u=i-lenb+1;
k=(f[i]-f[u-1])&1;
k=!k;
ans+=k^g[lenb];
}
printf("%d",ans);
return 0;
}

D. Vus the Cossack and Numbers

关于D题,其实是我先开题的,结果我觉得C题可做,巨佬tanao_觉得D题可做,就换题了,我打了一份D的代码,结果马上被我叉了。。。这里不贴出来了,这里贴一下tanao_巨佬的代码

#include<iostream>
#include<cstdio>
using namespace std;
long long read()
{
long long x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
x=x*10+ch-'0',ch=getchar();
while(ch<'0'||ch>'9')
ch=getchar();
while(ch>='0'&&ch<='9')
x=x*10+ch-'0',ch=getchar();
return x*f;
}
long long c(long long x)
{
if(x%100000==0)
return x;
if(x<0)
return x-x%100000-100000;
return x-x%100000;
}
int main()
{
int n;
cin>>n;
long long sum=0;
for(int i=1;i<=n;++i)
{
long long x=read();
if(c(sum)+c(x)==c(sum+x))
cout<<c(x)/100000<<" ";
else
cout<<c(x)/100000+1<<" ";
sum+=x;
}
return 0;
}

我大概看了一下巨佬的代码,首先把浮点数乘以100000防止卡精度,然后?????,我写了主体70多行就被巨佬20多行解决了?

不过思路差不多,开一个sum用来记录过去剩下的东西,如果和现在的加起来刚好能控制在0.5内,那么就直接取整,否则加1是吧。。。

各位大佬还是看代码理解一下...

果然还是我太菜了awa

最新文章

  1. DataTable转Entity(Emit版)
  2. VC++6.0MFC运行的简单流程
  3. Go prepare statment超过mysql最大数
  4. git总结
  5. Subclasses
  6. 【JavaScript】前端开发框架三剑客—AngularJS VS. Backone.js VS.Ember.js
  7. bzoj 3171 [Tjoi2013]循环格(MCMF)
  8. HTML5中的二进制大对象Blob(转)
  9. PHP设计模式——策略模式
  10. Python mining
  11. Dynamics CRM2015 The plug-in type does not exist in the specified assembly问题的解决方法
  12. poj12482 扫描线+lazy-tag
  13. 一个六年Java程序员的从业总结:比起掉发,我更怕掉队
  14. Libre 6006 「网络流 24 题」试题库 / Luogu 2763 试题库问题 (网络流,最大流)
  15. MySql5.5安装(windows)
  16. 转:动态table分页(ORCALE)
  17. SSH免密登录(并且免yes交互)
  18. socket-详细分析No buffer space available(转载)
  19. 面试、笔试中常用的SQL语句(数据库知识必杀)一共50个!!!
  20. Android UI开发第三十五篇——AppCompat实现Action Bar

热门文章

  1. Spring in action读书笔记(一) 自动化装配bean
  2. Pycharm学生版安装教程(2019-12月更新)
  3. $POJ2311\ Cutting\ Game$ 博弈论
  4. HBase学习笔记(一)——基础入门
  5. Ceph 文件系统 CephFS 的实战配置,等你来学习 -- &lt;4&gt;
  6. 使用redis的zset实现高效分页查询(附完整代码)
  7. NTT - 牛客
  8. scratch3.0二次开发scratch3.0基本介绍(第一章)
  9. MVEL2.0的使用实例(一)
  10. scrapy selector选择器