A:对于每个B,会和其右边的每个W交换一次。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 200010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n;
ll ans=;
char s[N];
int main()
{
scanf("%s",s+);n=strlen(s+);
int cnt=;
for (int i=n;i;i--)
if (s[i]=='W') cnt++;
else ans+=cnt;
cout<<ans;
return ;
}

  B:从大到小贪心,遇到某个数能和其他数组成2的次幂就把他俩删掉。正确性基于这点:按从大到小的顺序找到的数,若能匹配,其在剩余的数中所能匹配的数是唯一的,这样匹配之后无论如何不会更劣。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
#define ll long long
#define N 200010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,a[N],ans;
map<int,int> cnt;
int main()
{
n=read();
for (int i=;i<=n;i++) cnt[a[i]=read()]++;
sort(a+,a+n+);
for (int i=n;i>=;i--)
if (cnt[a[i]])
{
int t=a[i];cnt[a[i]]--;
while (t!=(t&-t)) t^=t&-t;
if (cnt[(t<<)-a[i]]) ans++,cnt[(t<<)-a[i]]--;
else cnt[a[i]]++;
}
cout<<ans;
return ;
}

  C:调了半天贪心一直过不掉,好长时间之后才发现假掉了,加个二分就过了,莫名其妙的花了50min。二分答案,维护一个栈存储字符串的非a位置,如果当前字符串比上个字符串长,显然后面全填上a就可以了;否则弹栈至非a位置不大于当前串长度,然后将末尾达到限制的位置弹出,如果弹空了说明不合法(当然如果有剩余的a是合法的),否则将未达限制的最后一位+1,后面全清成a即可。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 200010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,a[N],pos[N],num[N],top,ans;
bool check(int ans)
{
top=;
for (int i=;i<=n;i++)
if (a[i]<=a[i-])
{
int x=a[i];
while (top&&pos[top]>x) top--;
while (top&&pos[top]==x&&num[top]==ans) top--,x--;
if (x==) return ;
else if (pos[top]<x) {pos[++top]=x,num[top]=;if (ans==) return ;}
else num[top]++;
}
return ;
}
int main()
{
n=read();
for (int i=;i<=n;i++) a[i]=read();
int l=,r=n;
while (l<=r)
{
int mid=l+r>>;
if (check(mid)) ans=mid,r=mid-;
else l=mid+;
}
cout<<ans;
return ;
}

  D:显然第一个人每次都是必须走的。每进入某一列,第二个人都可以选择一直不动,直到第一个人的移动使其撞到障碍。如果可以到达(x,y),则对(x,1..y-1),要么可以到达,要么在x之前有障碍。那么让一颗棋子从起点出发,每次都尽量移动,set找一下该列最近障碍,对每一列的答案取个min即可。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<map>
#include<set>
using namespace std;
#define ll long long
#define N 200010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int r,c,n,t,x,y,ans;
map<int,int> f[N];
set<int> g[N];
struct data{int x,y;
}a[N];
int main()
{
r=read(),c=read();n=read();ans=r+;
for (int i=;i<=n;i++) a[i].x=read(),a[i].y=read(),f[a[i].x][a[i].y]=,g[a[i].y].insert(a[i].x);
for (int i=;i<=c;i++) g[i].insert(r+);
int x=,y=;
for (;x<r;)
{
ans=min(ans,*g[y].lower_bound(x));
x++;if (!f[x][y+]&&y<c) y++;
}
ans=min(ans,*g[y].lower_bound(x));
cout<<ans-;
return ;
}

  死于罚时。result:rank 110 rating +389

AtCoder Grand Contest 029 翻车记的更多相关文章

  1. AtCoder Grand Contest 017 迟到记

    晚上去操场上浪. 回来以后看到好几个人开着 \(AtCoder\) 在打代码. ... ... 今天有 \(AtCoder\) 比赛 ? 管它呢, \(Kito\) 在切西瓜,先吃西瓜... 然后看 ...

  2. AtCoder Grand Contest 029 Solution

    A: Solved. 签. #include <bits/stdc++.h> using namespace std; #define ll long long #define N 200 ...

  3. AtCoder Grand Contest 012

    AtCoder Grand Contest 012 A - AtCoder Group Contest 翻译 有\(3n\)个人,每一个人有一个强大值(看我的假翻译),每三个人可以分成一组,一组的强大 ...

  4. AtCoder Grand Contest 007

    AtCoder Grand Contest 007 A - Shik and Stone 翻译 见洛谷 题解 傻逼玩意 #include<cstdio> int n,m,tot;char ...

  5. AtCoder Grand Contest 019 A: Ice Tea Store

    tourist出的题诶!想想就很高明,老年选手可能做不太动.不过A题还是按照惯例放水的. AtCoder Grand Contest 019 A: Ice Tea Store 题意:买0.25L,0. ...

  6. AtCoder Grand Contest 011

    AtCoder Grand Contest 011 upd:这篇咕了好久,前面几题是三周以前写的... AtCoder Grand Contest 011 A - Airport Bus 翻译 有\( ...

  7. AtCoder Grand Contest 031 简要题解

    AtCoder Grand Contest 031 Atcoder A - Colorful Subsequence description 求\(s\)中本质不同子序列的个数模\(10^9+7\). ...

  8. AtCoder Grand Contest 010

    AtCoder Grand Contest 010 A - Addition 翻译 黑板上写了\(n\)个正整数,每次会擦去两个奇偶性相同的数,然后把他们的和写会到黑板上,问最终能否只剩下一个数. 题 ...

  9. AtCoder Grand Contest 009

    AtCoder Grand Contest 009 A - Multiple Array 翻译 见洛谷 题解 从后往前考虑. #include<iostream> #include< ...

随机推荐

  1. vi/vim 常用命令 之 一图定天下!

    直接上干活,一张图解决~

  2. JTree实现电脑资源管理器

    0.前言 最近老师布置了一项用Java写资源管理器的任务,一开始以为简单,但是实际操作起来,却发现网上的资源用起来相对生疏.在使用中,我也遇到了许多问题,虽然不能像其他博主一样,写的非常齐全,但我还是 ...

  3. WebGL——osg框架学习四

    这篇我们接着来看一下DrawEntityActor类,我们来看看这个继承DrawActor的类到底做了什么事.我们之前学习了Drawable对应的DrawActor,那么我们类比的来看Drawable ...

  4. Netty源码分析第4章(pipeline)---->第7节: 前章节内容回顾

    Netty源码分析第四章: pipeline 第七节: 前章节内容回顾 我们在第一章和第三章中, 遗留了很多有关事件传输的相关逻辑, 这里带大家一一回顾 首先看两个问题: 1.在客户端接入的时候, N ...

  5. mysql innodb 从 ibd 文件恢复表数据

    最近内部的 mysql 数据库发生了一件奇怪的事,其中有一个表 users625 突然出现问题, 所有对它的操作都报错误 数据表不存在. mysql> select count(*) from ...

  6. HTML(2)普通文本的修饰

    段落标签 <p> 我们使用<p>...</p>标签来标记一个段落,两个段落之间会自动换行.需要注意的是,在书写HTML时,连续的空格只被看作一个空格,如果需要插入空 ...

  7. python数据分析系列(1)

    目录 python基础 python语言基础 Ipython的一些特性 Python语法基础 Python控制流 lambda表达式 Python的数据结构 元组 列表 字典 集合 列表.集合.字典推 ...

  8. RabbitMQ基础使用之集群构建

    简介 RabbitMQ是基于Erlang开发的一种消息队列服务,本篇文章主要部署三台机器用来实现集群的普通模式与镜像模式!欢迎大家吐槽交流学习! 特点 集群节点包括内存节点和磁盘节点,有了磁盘节点就支 ...

  9. C++ 函数 函数的重载 有默认参数的函数

    函数的重载 C++允许用同一函数名定义多个函数,这些函数的参数个数和参数类型不同.这就是函数的重载(function overloading). int max1(int a,int b, int c ...

  10. 《Spring2之站立会议1》

    <Spring2之站立会议1> 昨天,查找了关于建立起服务器和客户端两端的连接的资料,并学习了如何写把两者建立起来的代码: 今天,模仿着相关资料,分别写了客户端和服务器两端的代码: 遇到的 ...