[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,将他们按顺序连起来,形成一条折线. 请你求出这条折线的 ...
 
随机推荐
- luoguP3979 遥远的国度  LCT+multiset维护子树信息
			
Code: #include<bits/stdc++.h> #define maxn 150000 #define ll long long #define inf 21474836470 ...
 - 【转载】servlet三大作用域:request,session,application
			
javaweb开发中Servlet三大域对象的应用(request.session.application(ServletContext)). 1. requestrequest是表示一个请求,只要发 ...
 - Django解决跨域俩方案
			
方案一:一套干掉全部Primary 首先你的pip下载一个第三方库贼厉害的: pip install corsheaders 然后在项目的setting.py里面引入第三方库,如下: INSTALLE ...
 - UNIX C 进程Part2
			
1.获取进程ID #include <unistd.h> pid_t getpid(void); //获取子进程id pid_t getppid(void);//获取父进程id 2.获取实 ...
 - 图片base64格式转为file文件类型上传方法
			
日常使用文件上传方式,都是通过input type='file'的文件选择框进行文件上传.但是会通过其他交互方式等到图片的base64格式进行上传.具体情况如下示意: 在项目开发中,需要进行照片采集, ...
 - Spring MVC学习总结(4)——SpringMVC权限管理
			
1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServlet. DispatcherServl ...
 - K大数查询
			
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MB Description 有N个位置,M个操作.操作有两种,每次操作如果是1 ...
 - mysql 多个select需要放入一个事务吗?
			
第一次写博客,还请大家多多支持 今天同事问了个问题:在多个select的时候,用不用放入同一个事务? 首先先看个例子: public class JDBCClient { public static ...
 - C语言——定义&&声明
			
1.变量的定义&声明 变量的声明有两种情况: <1>一种是需要建立存储空间的.例如:int a 在声明的时候就已经建立了存储空间. <2>另一种是不需要建立存储空间的. ...
 - 0223实战:MySQL Sending data导致查询很慢的问题详细分析
			
转自博客http://blog.csdn.net/yunhua_lee/article/details/8573621 [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据 ...