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. 分析: 一眼看 ...
随机推荐
- 在C++11中实现监听者模式
参考文章:https://coderwall.com/p/u4w9ra/implementing-signals-in-c-11 最近在完成C++大作业时,碰到了监听者模式的需求. 尽管C++下也可以 ...
- VC连接access
(1)首先拷贝 c:\program files\common files\system\ado\ 目录中的 msado15.dll 文件到项目中. (2)在VC中加入DLL,具体方法如下: (3)创 ...
- php的发展历史
php最初就是为了快速构建一个web页面而迅速被大家广为接受的.它的好处是在代码中能内嵌html的代码,从而让程序员能再一个页面中同时写html代码和php代码就能生成一个web页面. 这篇文章用时间 ...
- php之复制文件——php经典实例
php之复制文件——php经典实例 <?php function dirCopy($dir1,$dir2){ //判断是否目录存在 if(!file_exists($dir2) || !is_d ...
- htmlunit爬虫工具使用--模拟浏览器发送请求,获取JS动态生成的页面内容
Htmlunit是一款模拟浏览抓取页面内容的java框架,具有js解析引擎(rhino),可以解析页面的js脚本,得到完整的页面内容,特殊适合于这种非完整页面的站点抓取. 下载地址: https:// ...
- weblogic 开启注意问题
1.关闭防火墙 service iptables stop chkconfig iptables off 2.weblogic unable to get file lock问题 我的解决办法是ps ...
- nginx配置不当导致的目录遍历下载漏洞-“百度杯”CTF比赛 2017 二月场
题目:http://98fe42cede6c4f1c9ec3f55c0f542d06b680d580b5bf41d4.game.ichunqiu.com/login.php 题目内容: 网站要上线了, ...
- angular导出文件保存在本地
$scope.ev_click = function(obj){ var ev = document.createEvent("MouseEvents"); ev.initMous ...
- flask插件系列之Flask-WTF表单
flask_wtf是flask框架的表单验证模块,可以很方便生成表单,也可以当做json数据交互的验证工具,支持热插拔. 安装 pip install Flask-WTF Flask-WTF其实是对w ...
- linux和windows共享文件,通过samba
SAMBA共享1.安装samba:可以先检查下是否已经安装:rpm -qa | grep samba,没有的话自己安装下,这里介绍下基于RPM包的一种在线安装模式yumyum是一种快速安装模式,它会自 ...