[Offer收割]编程练习赛41
比赛日程安排
#pragma comment(linker, "/STACK:102400000,102400000")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<iostream>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<functional>
#include<math.h>
//#include<bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII;
void makedata() {
freopen("input.txt", "w", stdout);
cout << << endl; for(int i = ; i < ; i++) cout << << ' '; fclose(stdout);
} const int day[] = { , , , , , , , , , , , };
VI a[]; int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//makedata();
//std::ios::sync_with_stdio(0), cin.tie(0);
int n, m, t;
scanf("%d", &t); while(t--) {
bool ok = true;
scanf("%d%d", &n, &m); for(int i = ; i <= n; i++) a[i].clear(); for(int i = ; i < m; i++) {
int mm, d, u, v, tmp = ;
scanf("%d-%d%d%d", &mm, &d, &u, &v); for(int j = ; j < mm; j++)tmp += day[j - ]; tmp += d;
a[u].push_back(tmp);
a[v].push_back(tmp);
} for(int i = ; i <= n; i++) {
sort(a[i].begin(), a[i].end()); for(int j = ; j < a[i].size(); j++) {
if(a[i][j] - a[i][j - ] <= ) ok = false;
}
} if(ok) printf("YES\n");
else printf("NO\n");
} return ;
}
反转子串
#pragma comment(linker, "/STACK:102400000,102400000")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<iostream>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<functional>
#include<math.h>
#include<set>
//#include<bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII; char str[];
int l[], r[], s[]; void work(int L, int R, int rev) {
int i;
if (L > R) return;
if (rev & ) {
i = R;
while (i >= L) {
if (str[i] == ')') {
work(l[i] + , i - , rev + );
i = l[i] - ;
} else {
putchar(str[i]);
i--;
}
}
} else {
i = L;
while (i <= R) {
if (str[i] == '(') {
work(i + , r[i] - , rev + );
i = r[i] + ;
} else {
putchar(str[i]);
i++;
}
}
}
}
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//std::ios::sync_with_stdio(0), cin.tie(0);
scanf("%s", str);
int n = strlen(str);
int dep = , top;
memset(l, , sizeof(l));
memset(r, , sizeof(r));
for (int i = ; i < n; i++) {
if (str[i] == '(') {
s[dep++] = i;
} else if (str[i] == ')') {
top = s[dep - ];
l[i] = top;
r[top] = i;
dep--;
}
}
work(, n - , );
return ;
}
//agfdecbhijk
区间问题
把所有区间按结束位置排序,从小到大处理。
#pragma comment(linker, "/STACK:102400000,102400000")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<iostream>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<functional>
#include<math.h>
//#include<bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII;
void makedata() {
freopen("input.txt", "w", stdout);
cout << << endl;
for (int i = ; i < ; i++) cout << << ' ';
fclose(stdout);
} PII a[]; int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(), cin.tie();
int n, x, y;
cin >> n;
for (int i = ; i < n; i++) {
cin >> x >> y;
a[i] = make_pair(y, x);
}
sort(a, a + n);
int l = a[].first - , r = a[].first, ans = ;
for (int i = ; i < n; i++) {
if (a[i].second <= l) continue;
if (a[i].second <= r) {
ans++;
l = r;
r = a[i].first;
} else {
ans += ;
l = a[i].first - , r = a[i].first;
}
}
cout << ans << endl;
return ;
}
01间隔矩阵
比我想的简单一点,我觉得会超时的代码AC了,可能是因为数据是随机生成所以长宽都不会太大的缘故。
#pragma comment(linker, "/STACK:102400000,102400000")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<iostream>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<functional>
#include<math.h>
//#include<bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII;
void makedata() {
freopen("input.txt", "w", stdout);
int n = , m = , x = , c;
cout << n << ' ' << m << endl;
for (int i = ; i < n; i++) {
for (int j = ; j < m; j++) {
for (int k = ; k < x; k++) c = rand() % ;
cout << c;
}
cout << endl;
}
fclose(stdout);
} char a[][];
int h[], c[], l[], r[], tmph[], ans;
void calc(int ll, int rr) {
for (int i = ll; i <= rr; i++) tmph[i] = h[i];
tmph[ll - ] = , tmph[rr + ] = ;
l[ll] = ll - , r[rr] = rr + ;
for (int i = ll + ; i <= rr; i++) {
l[i] = i - ;
while (tmph[l[i]] >= tmph[i]) l[i] = l[l[i]];
}
for (int i = rr - ; i >= ll; i--) {
r[i] = i + ;
while (tmph[r[i]] >= tmph[i]) r[i] = r[r[i]];
}
for (int i = ll; i <= rr; i++) ans = max(ans, tmph[i] * (r[i] - l[i] - ));
} int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(), cin.tie();
int n, m;
cin >> n >> m;
for (int i = ; i <= n; i++) {
for (int j = ; j <= m; j++) {
cin >> a[i][j];
}
}
ans = ;
for (int i = ; i <= n; i++) {
h[] = ;
if (i == ) {
for (int j = ; j <= m; j++) h[j] = ;
} else {
for (int j = ; j <= m; j++)
if (a[i][j] != a[i - ][j]) h[j]++;
else h[j] = ;
}
c[] = ;
for (int j = ; j <= m; j++)
if (a[i][j] != a[i][j - ]) c[j] = c[j - ];
else c[j] = c[j - ] ^ ;
int ptr = , ll, rr;
while (ptr <= m) {
ll = ptr;
while (ptr + <= m && c[ptr + ] == c[ptr]) ptr++;
rr = ptr;
calc(ll, rr);
ptr = rr + ;
}
}
cout << ans << endl;
return ;
}
[Offer收割]编程练习赛41的更多相关文章
- HihoCoder1670 : 比赛日程安排([Offer收割]编程练习赛41)(模拟)
描述 H国编程联赛中有N只队伍,编号1~N. 他们计划在2018年一共进行M场一(队)对一(队)的比赛. 为了让参赛队员能得到充分的休息,联赛组委会决定:每支队伍连续两场比赛之间至少间隔一天.也就是如 ...
- HihoCoder1673 : 01间隔矩阵([Offer收割]编程练习赛41)(单调队列)
描述 给定一个N × M的01矩阵,小Hi希望从中找到一个01间隔的子矩阵,并且子矩阵的面积越大越好. 例如对于 0101010 1000101 0101010 1010101 0101010 在右侧 ...
- HihoCoder1672 : 区间问题([Offer收割]编程练习赛41)(贪心)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定N个区间[Ai, Bi],请你找到包含元素最少的整数集合S,使得每个区间都至少有两个整数在S中. 例如给定三个区间[1 ...
- HiHoCoder1671 : 反转子串([Offer收割]编程练习赛41)(占位)
描述 给定一个只包含括号和小写字母的字符串S,例如S="a(bc(de)fg)hijk". 其中括号表示将里面的字符串翻转.(注意括号可能嵌套) 请你输出翻转之后的字符串. 输入 ...
- hihocoder [Offer收割]编程练习赛4
描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...
- hihocoder [Offer收割]编程练习赛61
[Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...
- [Offer收割]编程练习赛46
[Offer收割]编程练习赛46赛后题解 A.AEIOU 分析
- ACM学习历程—Hihocoder [Offer收割]编程练习赛1
比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...
- [Offer收割]编程练习赛48
题目1 : 折线中点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定平面上N个点P1, P2, ... PN,将他们按顺序连起来,形成一条折线. 请你求出这条折线的 ...
随机推荐
- [iOS Reverse]logify日志追踪,锁定注入口-控制台查看
前言 logify是theos的一个组件,路径是: /opt/theos/bin/logify.pl 我们还是以微信红包为例子,根据[iOS Hacking]运行时分析cycript得到的入口文件: ...
- java这个404你能解决吗?
前言 本文首发于公众号[我的小碗汤]本公众号免费提供csdn下载服务,海量IT学习资源,如果你准备入IT坑,励志成为优秀的程序猿,那么这些资源很适合你,包括但不限于java.go.python.spr ...
- 【转载】JavaWeb之DBUtils QueryRunner类对数据表的增、删、查(8种结果集处理方式)、改操作
一.使用QueryRunner类,实现对数据表的 insert delete update package com.shuhuadream.queryrunner; import java.sql.C ...
- PAT_A1151#LCA in a Binary Tree
Source: PAT A1151 LCA in a Binary Tree (30 分) Description: The lowest common ancestor (LCA) of two n ...
- C语言中时钟编程
目录 C语言中时钟编程 1. 文章目的 2.基本概念 2.1 UTC时间 2.2 UNIX纪元时间 2.3 格林威治时间 (GMT) 3.时间转换 3.1 asctime函数 3.2 ctime函数 ...
- selenium使用Xpath+CSS+JavaScript+jQuery的定位方法(治疗selenium各种定位不到,点击不了的并发症)
跟你说,你总是靠那个firebug,chrome的F12啥的右击复制xpath绝对总有一天踩着地雷炸的你死活定位不到,这个时候就需要自己学会动手写xpath,人脑总比电脑聪明,开始把xpath语法给我 ...
- Problem 17
Problem 17 If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there a ...
- 3.在eclipse中创建Web项目,并部署到Tomcat上
1.找到创建web项目的菜单 2.创建web项目并选择web环境 3.查看创建好的web项目结构 4.在web项目的webContent文件夹下创建jsp页面 5.查看是否创建jsp页面成功,并编辑j ...
- (14)Spring Boot定时任务的使用【从零开始学Spring Boot】
本文介绍在 Spring Boot 中如何使用定时任务,使用非常简单,就不做过多说明了. com.kfit.base.scheduling.SchedulingConfig: package com. ...
- FADE:云存储中数据安全删除
FADE: Secure Overlay Cloud Storage with File Assured Deletion ,论文发表于SecureComm,C类. 香港大学的研究 ...