链接

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的更多相关文章

  1. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  2. AtCoder Regular Contest 094 (ARC094) CDE题解

    原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...

  3. AtCoder Regular Contest 092

    AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...

  4. AtCoder Regular Contest 093

    AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...

  5. AtCoder Regular Contest 094

    AtCoder Regular Contest 094 C - Same Integers 题意: 给定\(a,b,c\)三个数,可以进行两个操作:1.把一个数+2:2.把任意两个数+1.求最少需要几 ...

  6. AtCoder Regular Contest 095

    AtCoder Regular Contest 095 C - Many Medians 题意: 给出n个数,求出去掉第i个数之后所有数的中位数,保证n是偶数. \(n\le 200000\) 分析: ...

  7. AtCoder Regular Contest 102

    AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...

  8. AtCoder Regular Contest 096

    AtCoder Regular Contest 096 C - Many Medians 题意: 有A,B两种匹萨和三种购买方案,买一个A,买一个B,买半个A和半个B,花费分别为a,b,c. 求买X个 ...

  9. AtCoder Regular Contest 097

    AtCoder Regular Contest 097 C - K-th Substring 题意: 求一个长度小于等于5000的字符串的第K小子串,相同子串算一个. K<=5. 分析: 一眼看 ...

随机推荐

  1. hihoCoder #1175 : 拓扑排序·二

    题目链接:http://hihocoder.com/problemset/problem/1175 代码实现如下: #include <queue> #include <cstdio ...

  2. 2017ACM暑期多校联合训练 - Team 4 1003 HDU 6069 Counting Divisors (区间素数筛选+因子数)

    题目链接 Problem Description In mathematics, the function d(n) denotes the number of divisors of positiv ...

  3. NYOJ 129 树的判定 (并查集)

    题目链接 描述 A tree is a well-known data structure that is either empty (null, void, nothing) or is a set ...

  4. wget下载整个网站或特定目录

    下载整个网站或特定目录 wget -c -k -r -np -p http://www.yoursite.com/path -c, –continue 断点下载 -k, –convert-links ...

  5. NoSQL-来自维基百科

    NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称. 两者存在许多显著的不同点,其中最重要的是NoSQL不使用SQL作为查询语言.其数据存储可以不需 ...

  6. Codeforces Round #456 (Div. 2)

    Codeforces Round #456 (Div. 2) A. Tricky Alchemy 题目描述:要制作三种球:黄.绿.蓝,一个黄球需要两个黄色水晶,一个绿球需要一个黄色水晶和一个蓝色水晶, ...

  7. PGSql

    http://www.yiibai.com/postgresql/ http://www.postgresql.org/ http://blog.csdn.net/wulex/article/deta ...

  8. 正排索引(forward index)与倒排索引(inverted index) (转)

    一.正排索引(前向索引) 正排索引也称为"前向索引".它是创建倒排索引的基础,具有以下字段. (1)LocalId字段(表中简称"Lid"):表示一个文档的局部 ...

  9. bash: composer: command not found

    下载composer到本地:curl -sS https://getcomposer.org/installer | php 移动至系统服务:sudo mv composer.phar /usr/bi ...

  10. nio笔记

    http://blog.csdn.net/z69183787/article/category/2191483此人的博客 首先你要知道阻塞和非阻塞的概念,阻塞体现在这个线程不能干别的了,只能在这里等着 ...