1333A Little Artem

在一个\(n\)行\(m\)列的格子上染色,每个格子能染黑白两种

构造一种方案,使得四个方向有至少一个白色格子的黑色格子的数量,比四个方向有至少一个黑色格子的白色格子的数量,恰好多一

对于\(n=m\),只要构造一个黑色下三角就行,像这样:

BWWW
BBWW
BBBW
BBBB

考虑其它情况,就是在\(n=m\)的部分也是构造这样的三角,其它的用黑色排成一排或一列

分别是\(n>m\)和\(n<m\)两种情况

n>m:
BWWW
BWWW
....
BWWW
BBWW
BBBW
BBBB n<m:
BWWWW...WWW
BBWWW...WWW
BBBWW...WWW
BBBBW...WWW
BBBBB...BBB 也就是最后一行/第一列全部染成黑色

代码写的有点傻

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<iomanip>
#include<cstring>
#define reg register
#define EN std::puts("")
#define LL long long
inline int read(){
register int x=0;register int y=1;
register char c=std::getchar();
while(c<'0'||c>'9'){if(c=='-') y=0;c=std::getchar();}
while(c>='0'&&c<='9'){x=x*10+(c^48);c=std::getchar();}
return y?x:-x;
}
int main(){int T=read();while(T--){
int n=read(),m=read();
if(n==m){
for(reg int i=1;i<=n;i++){
for(reg int j=1;j<=i;j++) std::putchar('B');
for(reg int j=i+1;j<=n;j++) std::putchar('W');
EN;
}
}
else if(n>m){
for(reg int i=1;i+m<=n;i++){
std::putchar('B');
for(reg int j=2;j<=m;j++) std::putchar('W');
EN;
}
for(reg int i=1;i<=m;i++){
for(reg int j=1;j<=i;j++) std::putchar('B');
for(reg int j=i+1;j<=m;j++) std::putchar('W');
EN;
}
}
else{
for(reg int i=1;i<n;i++){
for(reg int j=1;j<=i;j++) std::putchar('B');
for(reg int j=i+1;j<=m;j++) std::putchar('W');
EN;
}
for(reg int j=1;j<=m;j++) std::putchar('B');
EN;
}
}
return 0;
}

CF1333B Kind Anton

有一个数组\(a,a_i\in\{-1,0,1\}\)

做一下变化:选一个\(1\le i<j\le n,a_j=a_i+a_j\)

问能不能通过这种变化,使得它变成数组\(b\)

因为只能把一个\(a_j\)之前的数\((i<j)\)加到\(a_j\)上,所以记录一下在第\(i\)位之前,\(a\)中有没有出现过\(1,-1\)

  • \(b_i>a_i\),此时如果没出现过\(1\),则无解
  • \(b_i<a_i\),此时如果没出现过\(-1\),无解
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<iomanip>
#include<cstring>
#define reg register
#define EN std::puts("")
#define LL long long
inline int read(){
register int x=0;register int y=1;
register char c=std::getchar();
while(c<'0'||c>'9'){if(c=='-') y=0;c=std::getchar();}
while(c>='0'&&c<='9'){x=x*10+(c^48);c=std::getchar();}
return y?x:-x;
}
int n;
int a[100006],b[100006];
int have1[100006],have_1[100006];
int main(){int T=read();while(T--){
n=read();
for(reg int i=1;i<=n;i++){
a[i]=read();
have1[i]|=have1[i-1];have_1[i]|=have_1[i-1];
if(a[i]==1) have1[i+1]=1;
else if(a[i]==-1) have_1[i+1]=1;
}
for(reg int i=1;i<=n;i++) b[i]=read();
for(reg int i=n;i;i--){
if(b[i]>a[i]){
if(!have1[i]) goto NO;
}
else if(b[i]<a[i]){
if(!have_1[i]) goto NO;
}
}
for(reg int i=1;i<=n+1;i++)
have1[i]=have_1[i]=0;
std::puts("YES");
continue;
NO:;std::puts("NO");
for(reg int i=1;i<=n+1;i++)
have1[i]=have_1[i]=0;
}
return 0;
}

 

CF1333C Eugene and an array

尺取法

然而比赛的时候没想出来,就会 AB

然后掉了40多分/kk

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<iomanip>
#include<cstring>
#include<map>
#define reg register
#define EN std::puts("")
#define LL long long
inline int read(){
register int x=0;register int y=1;
register char c=std::getchar();
while(c<'0'||c>'9'){if(c=='-') y=0;c=std::getchar();}
while(c>='0'&&c<='9'){x=x*10+(c^48);c=std::getchar();}
return y?x:-x;
}
std::map<LL,int>map;
LL sum[200006];
int n;
//CF1333C
//题意:求有多少个子序列(连续的),使得这些子序列中,没有和为 0 的子序列
//思路: l-r 的和为 0 ,转换为 sum[l-1]=sum[r] ,也就是前缀和
//尺取法,每次将 r 向右移动一位,然后根据条件把 l 右移直到符合要求
//在这里,能用尺取法的原因是,如果区间 l-r 中,因为 sum[l] 的原因导致不合法,那么 l 和之前的就都可以不考虑了,对于更大的 r 肯定也不合法
//此时对答案的贡献是 r-l ,列举一下就能知道
//原来这么简单比赛的时候就是没想出来 qaq ,当时一直在考虑怎么求不合法情况数,然后再用总数减,死在了去重上
int main(){
n=read();
map[0]=1;
reg LL ans=0;
reg int l=0,r=1;
for(reg int i=1;i<=n;i++) sum[i]=sum[i-1]+read();
while(r<=n){
while(map.find(sum[r])!=map.end()&&map[sum[r]]){
map[sum[l]]=0;l++;
}
map[sum[r]]=1;
ans+=r-l;
r++;
}
std::printf("%lld",ans);
return 0;
}

 


然而后面的并不想写了qwq

CF #632 (Div. 2) 对应题号CF1333的更多相关文章

  1. CF #636 (Div. 3) 对应题号CF1343

    unrated 选手悠闲做题,然后只做出四个滚蛋了 符合 div3 一贯风格,没啥难算法 E最后就要调出来了,但还是赛后才A的 CF1343A Candies 传送门 找到一个 \(x\),使得存在一 ...

  2. CF #374 (Div. 2) C. Journey dp

    1.CF #374 (Div. 2)    C.  Journey 2.总结:好题,这一道题,WA,MLE,TLE,RE,各种姿势都来了一遍.. 3.题意:有向无环图,找出第1个点到第n个点的一条路径 ...

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

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

  4. CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组(转)

    转载自:http://www.cnblogs.com/icode-girl/p/5744409.html 题目链接:CF #365 (Div. 2) D - Mishka and Interestin ...

  5. CF #376 (Div. 2) C. dfs

    1.CF #376 (Div. 2)    C. Socks       dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...

  6. CF #375 (Div. 2) D. bfs

    1.CF #375 (Div. 2)  D. Lakes in Berland 2.总结:麻烦的bfs,但其实很水.. 3.题意:n*m的陆地与水泽,水泽在边界表示连通海洋.最后要剩k个湖,总要填掉多 ...

  7. CF #374 (Div. 2) D. 贪心,优先队列或set

    1.CF #374 (Div. 2)   D. Maxim and Array 2.总结:按绝对值最小贪心下去即可 3.题意:对n个数进行+x或-x的k次操作,要使操作之后的n个数乘积最小. (1)优 ...

  8. CF #371 (Div. 2) C、map标记

    1.CF #371 (Div. 2)   C. Sonya and Queries  map应用,也可用trie 2.总结:一开始直接用数组遍历,果断T了一发 题意:t个数,奇变1,偶变0,然后与问的 ...

  9. CF 628B New Skateboard --- 水题

    CD 628B 题目大意:给定一个数字(<=3*10^5),判断其能被4整除的连续子串有多少个 解题思路:注意一个整除4的性质: 若bc能被4整除,则a1a2a3a4...anbc也一定能被4整 ...

随机推荐

  1. 在IDEA导入maven项目

    1.依次打开File—New—Module from Existing Sources...

  2. 29.2 Iterator 迭代器ConcurrentModificationException:并发修改异常处理

    /** Iterator:迭代器* * 需求:判断集合中是否包含元素java,如果有则添加元素android * Exception in thread "main" java.u ...

  3. pgsql中的行锁

    pgsql中的行锁 前言 用户可见的锁 regular Lock 行级别 FOR UPDATE FOR NO KEY UPDATE FOR SHARE FOR KEY SHARE 测试下加锁之后的数据 ...

  4. php开发中如何判断 是否微信访问

    在开发中遇到了这样一个需求,仅允许在微信中访问,所以就要对微信浏览器访问进行判断,本篇博文讲述如何判断是否是微信访问. /** * 判断是否微信访问 * @return bool */ functio ...

  5. 【JAVA】并发-基础IO

    一.java.io包支持.java的IO流有输入.输出两种,每种输入.输出流又可分为字节流.字符流两大类,字节流以字节为单位处理IO操作,字符流以字符为单位处理IO操作 JDK 1.4以后有java. ...

  6. python成语接龙小游戏

    上一篇讲了小游戏的坑现在把源码放出来 #coding:utf-8 import string import pypinyin import sys import random print(" ...

  7. Git敏捷开发--reset和clean

    reset 丢弃本地所有修改,强行和上游分支保持一致 git reset --hard HEAD 若仅丢弃某个文件的改动,利用checkout git checkout your_file clean ...

  8. JAVA的synchronized写法

    使用关键字synchronized的写法比较多,常用的有如下几种,代码如下: public class MyService { synchronized public static void test ...

  9. 11. this.setState更新问题

    this.setState是异步的,所以在this.setState之后不能立刻得到最新的state数据关于如何获取最新的数据,有如下三种方法 1.回调函数 this.setState({ xxx:' ...

  10. [源码分析] 带你梳理 Flink SQL / Table API内部执行流程

    [源码分析] 带你梳理 Flink SQL / Table API内部执行流程 目录 [源码分析] 带你梳理 Flink SQL / Table API内部执行流程 0x00 摘要 0x01 Apac ...