AtCoder Regular Contest 81
C.Make a Rectangle
给出一堆木棍的长度
从中选4根,询问在能围成矩形的情况下,矩形的最大面积
开个map统计一下就行
分正方形和矩形分别统计即可
复杂度$O(n \log n)$
#include <map>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; extern inline char gc() {
static char RR[], *S = RR + , *T = RR + ;
if(S == T) fread(RR, , , stdin), S = RR;
return *S ++;
}
inline int read() {
int p = , w = ; char c = gc();
while(c > '' || c < '') { if(c == '-') w = -; c = gc(); }
while(c >= '' && c <= '') p = p * + c - '', c = gc();
return p * w;
} #define ri register int
#define ll long long ll ans; int n, mx;
map <int, int> num; int main() {
n = read();
for(ri i = ; i <= n; i ++) num[read()] ++;
for(map<int, int> :: iterator it = num.begin(); it != num.end(); it ++) {
int p1 = it -> first, p2 = it -> second;
if(p2 >= ) ans = max(ans, 1ll * p1 * p1);
if(p2 >= ) ans = max(ans, 1ll * p1 * mx), mx = p1;
}
printf("%lld\n", ans);
return ;
}
D.Coloring Dominoes
给出一个$2 * m$的网格,被$1 *2$的骨牌满覆盖
有3种颜色,给骨牌染色,要求相领的骨牌颜色不相同,询问方案数
分4种情况讨论即可
自己是($1 * 2$或者$2 *2$),前置状态是($1 * 2$或者$2 * 2$)
复杂度$O(n)$,$n = 52$...
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; #define ri register int
#define sid 105
#define mod 1000000007 int n;
char S[][sid]; int main() {
cin >> n >> S[] + >> S[] + ;
ri i = , ans;
if(S[][i] == S[][i]) i = , ans = ;
else i = , ans = ;
for(i = i + ; i <= n; i ++) {
int p1 = S[][i] == S[][i];
int p2 = S[][i - ] == S[][i - ];
if(!p1) i ++;
if(p1 && p2) ans = (1ll * ans * ) % mod;
if(!p1 && !p2) ans = (1ll * ans * ) % mod;
if(!p1 && p2) ans = (1ll * ans * ) % mod;
}
printf("%d\n", ans);
return ;
}
E.Don't Be a Subsequence
询问最短的,字典序最小的,不是串$S$的子序列的字符串
考虑序列自动机
那么,所有不能被$S$所识别的序列一定是在识别了一段前置之后多了一个字母
考虑虚拟一个节点$n + 1$,能转移到它说明不是串$S$的子序列
之后就是一个拓扑图$dp$和字典序的事了
复杂度$O(26 * n)$
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; #define ri register int
#define sid 200050 char s[sid];
int nxt[sid][], f[sid]; int main() { scanf("%s", s + );
int n = strlen(s + ); for(ri i = ; i < ; i ++) nxt[n][i] = n + ;
for(ri i = n - ; i >= ; i --) {
for(ri j = ; j < ; j ++) nxt[i][j] = nxt[i + ][j];
nxt[i][s[i + ] - 'a'] = i + ;
} for(ri i = n; i >= ; i --) {
f[i] = 1e9;
for(ri j = ; j < ; j ++)
f[i] = min(f[i], + f[nxt[i][j]]);
} int o = ;
while(o != n + ) {
for(ri j = ; j < ; j ++)
if(f[o] == f[nxt[o][j]] + ) {
o = nxt[o][j];
printf("%c", j + 'a'); break;
}
}
return ;
}
F. Flip and Rectangles
可以任意地翻转一些行或者一些列
询问最大子矩阵
鬼畜的性质:一个矩阵中,如果所有的$2 *2$子矩形都有偶数个黑点,那么它就能被翻转出来
证明网上一大堆
然后令$v[i][j]$表示以$(i, j)$为左上角存不存在$2 *2$偶数黑点矩阵
问题转化为求最大子矩阵
注意特判一行,一列
注意计算答案时,求出来的最大子矩阵的长和宽是原题中最大子矩阵长和宽 - 1的结果
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; #define ri register int
#define sid 2005 char s[sid];
int n, m, ans;
bool v[sid][sid], c[sid][sid];
short h[sid][sid], l[sid][sid], r[sid][sid];
short L[sid][sid], R[sid][sid]; int main() { scanf("%d%d", &n, &m);
for(ri i = ; i <= n; i ++) {
scanf("%s", s + );
for(ri j = ; j <= m; j ++)
c[i][j] = (s[j] == '#') ? : ;
} for(ri i = ; i < n; i ++)
for(ri j = ; j < m; j ++)
v[i][j] = c[i][j] ^ c[i + ][j] ^ c[i][j + ] ^ c[i + ][j + ] ^ ; for(ri i = ; i <= n; i ++) {
int lst = ;
for(ri j = ; j <= m; j ++)
if(v[i][j]) l[i][j] = lst;
else L[i][j] = , lst = j; lst = m + ;
for(ri j = m; j >= ; j --)
if(v[i][j]) r[i][j] = lst;
else R[i][j] = m + , lst = j;
} for(ri i = ; i <= m + ; i ++) R[][i] = m + ; ans = max(n, m);
for(ri i = ; i <= n; i ++)
for(ri j = ; j <= m; j ++)
if(v[i][j]) {
h[i][j] = h[i - ][j] + ;
L[i][j] = max((short)(l[i][j] + ), L[i - ][j]);
R[i][j] = min((short)(r[i][j] - ), R[i - ][j]);
ans = max(ans, (R[i][j] - L[i][j] + ) * (h[i][j] + ));
} printf("%d\n", ans);
return ;
}
AtCoder Regular Contest 81的更多相关文章
- AtCoder Regular Contest 061
AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...
- AtCoder Regular Contest 094 (ARC094) CDE题解
原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...
- AtCoder Regular Contest 092
AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...
- AtCoder Regular Contest 093
AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...
- AtCoder Regular Contest 094
AtCoder Regular Contest 094 C - Same Integers 题意: 给定\(a,b,c\)三个数,可以进行两个操作:1.把一个数+2:2.把任意两个数+1.求最少需要几 ...
- AtCoder Regular Contest 095
AtCoder Regular Contest 095 C - Many Medians 题意: 给出n个数,求出去掉第i个数之后所有数的中位数,保证n是偶数. \(n\le 200000\) 分析: ...
- AtCoder Regular Contest 102
AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...
- AtCoder Regular Contest 096
AtCoder Regular Contest 096 C - Many Medians 题意: 有A,B两种匹萨和三种购买方案,买一个A,买一个B,买半个A和半个B,花费分别为a,b,c. 求买X个 ...
- AtCoder Regular Contest 097
AtCoder Regular Contest 097 C - K-th Substring 题意: 求一个长度小于等于5000的字符串的第K小子串,相同子串算一个. K<=5. 分析: 一眼看 ...
随机推荐
- Sublime之插件的安装(三)
今天在写js的时候,突然想到一个问题就是能不能快速的对齐的插件,当当当~~~sublime这么神器当然有,那就是:Alignment插件 如果你写的代码是这样的: var a = , b =, ccc ...
- VS 2010 应用程序无法启动
其实一般遇到这种问题, 不管是debug还是release, 也不用看提示的内存地址, 首先应该想到库是否包含正确. 一个可能的错误就是32位或64位不匹配的错误. 比如环境变量设的是64位的Open ...
- git push multiple repo
git remote add xxx https://git.github.com
- 【IDEA】IDEA中maven项目pom.xml依赖不生效解决
问题: 今天在web项目中需要引入poi相关jar包.查看之下才发现pom.xml中的依赖虽然已经下载到了本地仓库 repository,但是却没有加入到项目路径的 Extenal Libraries ...
- Lucene7.2.1系列(二)luke使用及索引文档的基本操作
系列文章: Lucene系列(一)快速入门 Lucene系列(二)luke使用及索引文档的基本操作 Lucene系列(三)查询及高亮 luke入门 简介: github地址:https://githu ...
- 在字符串S1中删除字符串S2中所包含的字符【转】
转自:http://www.cnblogs.com/tolimit/p/4202959.html /************************************************** ...
- Docker practice
Docker 实践 目标 创建一个基于最新版Ubuntu的镜像,在该镜像中更新apt包源并安装NTP package,最后将该新镜像提交到本地私有的registry中. 本地创建私有Registry ...
- php7.33 configure
To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for desc ...
- C语言地址对齐(转)--网络编程之结构体大小的计算
什么是地址对齐? 现代计算机中内存空间都是按照字节(byte)划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数 ...
- 自定义事件的触发dispatchEvent
1. 对于标准浏览器,其提供了可供元素触发的方法:element.dispatchEvent(). 不过,在使用该方法之前,我们还需要做其他两件事,及创建和初始化.因此,总结说来就是: documen ...