AtCoder Grand Contest 029 翻车记
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 翻车记的更多相关文章
- AtCoder Grand Contest 017 迟到记
晚上去操场上浪. 回来以后看到好几个人开着 \(AtCoder\) 在打代码. ... ... 今天有 \(AtCoder\) 比赛 ? 管它呢, \(Kito\) 在切西瓜,先吃西瓜... 然后看 ...
- AtCoder Grand Contest 029 Solution
A: Solved. 签. #include <bits/stdc++.h> using namespace std; #define ll long long #define N 200 ...
- AtCoder Grand Contest 012
AtCoder Grand Contest 012 A - AtCoder Group Contest 翻译 有\(3n\)个人,每一个人有一个强大值(看我的假翻译),每三个人可以分成一组,一组的强大 ...
- AtCoder Grand Contest 007
AtCoder Grand Contest 007 A - Shik and Stone 翻译 见洛谷 题解 傻逼玩意 #include<cstdio> int n,m,tot;char ...
- AtCoder Grand Contest 019 A: Ice Tea Store
tourist出的题诶!想想就很高明,老年选手可能做不太动.不过A题还是按照惯例放水的. AtCoder Grand Contest 019 A: Ice Tea Store 题意:买0.25L,0. ...
- AtCoder Grand Contest 011
AtCoder Grand Contest 011 upd:这篇咕了好久,前面几题是三周以前写的... AtCoder Grand Contest 011 A - Airport Bus 翻译 有\( ...
- AtCoder Grand Contest 031 简要题解
AtCoder Grand Contest 031 Atcoder A - Colorful Subsequence description 求\(s\)中本质不同子序列的个数模\(10^9+7\). ...
- AtCoder Grand Contest 010
AtCoder Grand Contest 010 A - Addition 翻译 黑板上写了\(n\)个正整数,每次会擦去两个奇偶性相同的数,然后把他们的和写会到黑板上,问最终能否只剩下一个数. 题 ...
- AtCoder Grand Contest 009
AtCoder Grand Contest 009 A - Multiple Array 翻译 见洛谷 题解 从后往前考虑. #include<iostream> #include< ...
随机推荐
- python数据分析的工具环境
python做数据分析的优势: 拥有大量的库为数据分析和处理提供了完整的工具链 随着库还在不断的增加的同时, 算法的实现也更加的创新.Numpy, matplotlib, scipy,scikit-l ...
- hdu1829A Bug's Life(种类并查集)
传送门 关键在于到根节点的距离,如果两个点到根节点的距离相等,那么他们性别肯定就一样(因为前面如果没有特殊情况,两个点就是一男一女的).一旦遇到性别一样的,就说明找到了可疑的 #include< ...
- Youtube高清视频下载的3种方法
经常看视频的朋友都听说或使用过youtube, 它是一个综合性的视频网站,包含的内容多种多样,能满足不同的人的需求,最要的是广告少,资源良心,不像有些网站,动不动就是1分种以上的长广告.有些因为工作 ...
- 分享一篇IBN(Intent-based networking)调研报告
IBN调研报告 背景 SDN(Software-defined network):最大特点在于具有松耦合的控制平面与数据平面.支持集中化的网络状态控制.实现底层网络设施对上层应用的透明.具有灵活的软件 ...
- 新手Python第二天(存储)
Python 列表的创建 创建一个空列表 例如:fruit=[] 创建一个有元素的列表 例如:fruit=['apple','banana','cherry'] 创建嵌套列表 例如:fruit=[[ ...
- 【python 2.7】输入任意字母数字,输出其对应的莫尔斯码并播放声音
#python 2.7 #!/usr/bin/env python # -*- coding:utf-8 -*- import os import winsound,sys,time __author ...
- Go入门指南
第一部分:学习 Go 语言 第1章:Go 语言的起源,发展与普及 1.1 起源与发展 1.2 语言的主要特性与发展的环境和影响因素 第2章:安装与运行环境 2.1 平台与架构 2.2 Go 环境变量 ...
- 【神经网络】自编码聚类算法--DEC (Deep Embedded Clustering)
1.算法描述 最近在做AutoEncoder的一些探索,看到2016年的一篇论文,虽然不是最新的,但是思路和方法值得学习.论文原文链接 http://proceedings.mlr.press/v48 ...
- hadoop之计数器和管道的mrunit测试
引言 hadoop的调试真心让人灰常恼火,而且从企业实际出发,集群的资源是有限的,不可能在集群上跑一遍又一遍根据log去调试代码,那么使用MRUnit编写测试单元,显得尤为重要.MRUnit中的Map ...
- MegaCli64/MegaCli命令详解
基础命令学习目录首页 MegaCli64 -LDInfo -Lall -aALL这个命令能看到RAID的状态MegaCli64 -LDSetProp ForcedWB -L0 -a0MegaCli64 ...