[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,将他们按顺序连起来,形成一条折线. 请你求出这条折线的 ...
随机推荐
- C# 检测字符串是否为数字
long n; 1. ], ].All(char.IsDigit); //识别空字符时候 会认为是数字 string str0 = ""; string str1 = " ...
- 题解 P3258 【[JLOI2014]松鼠的新家】(From luoguBlog)
唯一能得分的题也被自己搞炸了,好的. 考场上读完题基本认定和lca脱不了干系,想了一会确认是树剖. 那么问题来了,考前一节课刚发现自己之前打的树剖是错的. 而且就算是错的我也没信心考场调出来. 于是打 ...
- Linux 之根目录介绍
1. /bin binary二进制 存放系统许多可执行程序文件 执行的相关指令,例如ls pwd whoami,后台的支持文件目录 2. /sbin super binary超级的二进制 存放系统许多 ...
- 【转】Linux rpm 命令参数使用详解[介绍和应用]
RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种 ...
- Lua循环结构while循环、repeat 循环、for循环_学习笔记03
Lua循环结构while循环.repeat 循环.for循环 while语法结构 while 循环条件 do 循环体 end --1.输出1到100 index = do print(index) ...
- C语言开发框架、printf(day02)
C语言里包含以.c作为扩展名的文件,这种 文件叫源文件.C语言程序的绝大部分内容 应该记录在源文件里. C语言里还包括以.h作为扩展名的文件,这种 文件叫头文件. C语言程序里可以直接使用数字和加减乘 ...
- 目录-Linux
Linux文件系统: Linux: glibc 程序编译方式: 动态链接 静态编译 进程的类型: 终端:硬件设备,关联一个用户接口 与终端相关:通过终端启动 与终端无关:操作引导启动过程当中自动启动 ...
- 57.query phase
主要知识点: query phase步骤 query phase如何提升性能 一.query phase步骤 一次query phase一般包括以下三个步骤 The query pha ...
- html绑定点击事件传值
1.方法1function radioSelect(event){ var valueRadio=event.value; if(valueRadio =='目的口岸'){ return '目的口岸' ...
- VirtualBox没有权限访问共享文件夹
将用户添加至vboxsf组 命令: sudo adduser ly vboxsf 搞定!