[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,将他们按顺序连起来,形成一条折线. 请你求出这条折线的 ...
随机推荐
- Centos6.6 编译安装nginx
一.基本环境 nginx 1.9版以后增加了一些新的特性,支持tcp负载均衡,不过这次还是用1.8.0,这里面有个memcached的代理模块,有时间再测试下 1.centos6.6 2.nginx1 ...
- excel 处理方法
//.方法一:采用OleDB读取EXCEL文件: //打开excel 返回指定表中的所有数据 public DataSet ExcelToDS(string Path) { string strCon ...
- es6-Symbol用法
1.symbol概念 这种数据类型提供独一无二值 比如,在JS中,我可以通过数据类型生成变量a=number05,也可以生成b=nubmer05,这两个变量可以说是相等的. 但是用symbol生成的值 ...
- C#第二节课
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- shell脚本编程及bash特性
bash特性及bash脚本编程初步 终端,附着在终端的接口程序; GUI: KDE,GNome,Xfce CLI: /etc/shells bash的特性: 命令行展开: ~,{} 命令别名: ali ...
- 彻底弄清楚session是什么?
搬运自博主xueqinna的CSDN博客,根据自己的理解修改了部分内容,介意者请前往原博主博客看原文. 今天就来彻底的学一下session是个啥,作者罗列了几个要点:1.session 是啥?2.怎么 ...
- Python之scrapy linkextractors使用错误
1.环境及版本 python3.7.1+scrapy1.5.1 2.问题及错误代码详情 优先贴上问题代码,如下: import scrapy from scrapy.linkextractors im ...
- Python之Django的Model2
一.创建数据库 创建数据库 进入数据库: mysql -uroot -p 创建数据库: CREATE DATABASE test1 CHARSET=utf8; 连接数据库 虚拟环境中安装数据库模块:p ...
- Java设计模式之 — 组合(Composite)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9153753 听说你们公司最近新推出了一款电子书阅读应用,市场反应很不错,应用里还有 ...
- 12.IDEA中自动导资源包
在idea工程中,当你赋值一个类文件的部分代码,粘贴到另一个文件中时,需要导入原来文件中的包资源, 自动设置如下