[Offer收割]编程练习赛40
不到一个小时AK,虽然是VP的,舒服,第一次。都简单的一比,没什么可说的。
查找三阶幻方
#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);
} int a[][];
bool check(int x, int y) {
int sum = a[x][y] + a[x][y + ] + a[x][y + ]; for(int i = ; i < ; i++) {
if(a[x + i][y] + a[x + i][y + ] + a[x + i][y + ] != sum) return false; if(a[x][y + i] + a[x + ][y + i] + a[x + ][y + i] != sum) return false; if(a[x][y] + a[x + ][y + ] + a[x + ][y + ] != sum) return false; if(a[x + ][y] + a[x + ][y + ] + a[x][y + ] != sum) return false;
} return true;
}
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];
}
} int ans = ; for(int i = ; i + < n; i++) {
for(int j = ; j + < m; j++) {
if(check(i, j)) ans++;
}
} cout << ans << endl;
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<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);
}
bool f[];
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(), cin.tie();
lint x;
int t, k;
cin >> t; while(t--) {
cin >> x >> k;
int st = , cnt = ; while(st != k) {
cnt++; if(st == || cnt > ) {
x = -;
break;
} st = st * (x % ) % ;
x -= ; if(x <= ) {
x = -;
break;
}
} cout << x << endl;
} return ;
}
01间隔方阵
#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);
} int f[][], fl[][], fu[][];
char a[][];
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];
}
} memset(f, , sizeof(f));
memset(fl, , sizeof(fl));
memset(fu, , sizeof(fu)); for(int i = ; i < n; i++) {
for(int j = ; j < m; j++) {
if(j == ) {
f[i][j] = ;
fl[i][j] = ;
} else {
if(a[i][j] == a[i][j - ]) fl[i][j] = ;
else fl[i][j] = fl[i][j - ] + ;
} if(i == ) {
f[i][j] = ;
fu[i][j] = ;
} else {
if(a[i][j] == a[i - ][j]) fu[i][j] = ;
else fu[i][j] = fu[i - ][j] + ;
}
}
} int ans = ; for(int i = ; i < n; i++) {
for(int j = ; j < m; j++) {
if(a[i][j] != a[i - ][j - ]) {
f[i][j] = ;
} else {
int tmp = 0x3FFFFFFF;
tmp = min(tmp, fl[i][j]);
tmp = min(tmp, fu[i][j]);
tmp = min(tmp, f[i - ][j - ] + );
f[i][j] = tmp; if(ans < tmp) ans = tmp;
}
}
} cout << ans << endl;
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<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);
} class SegmentTree {
private:
int *data, *lazy;
void pushup(int rt) {
data[rt] = max(data[rt << ], data[rt << | ]);
}
void pushdown(int rt, int m) {
if(lazy[rt] == ) return; lazy[rt << ] = lazy[rt];
lazy[rt << | ] = lazy[rt];
data[rt << ] = lazy[rt];
data[rt << | ] = lazy[rt];
lazy[rt] = ;
}
public:
SegmentTree(int n) : data((int *)malloc((n << ) * sizeof(int))), lazy((int *)malloc((n << ) * sizeof(int))) {}
void Build(int * base, int l, int r, int rt) {
lazy[rt] = ; if(l == r) data[rt] = base[l];
else {
int mid = (l + r) >> ;
Build(base, l, mid, rt << );
Build(base, mid + , r, rt << | );
pushup(rt);
}
}
void Modify(int l, int r, int rt, int L, int R, int v) {
if(L <= l && R >= r) {
lazy[rt] = v;
data[rt] = v;
return;
} pushdown(rt, r - l + );
int mid = (l + r) >> ; if(L <= mid)
Modify(l, mid, rt << , L, R, v); if(R > mid)
Modify(mid + , r, rt << | , L, R, v); pushup(rt);
}
int QueryPoint(int l, int r, int rt, int val) {
if(l == r) return data[rt]; pushdown(rt, r - l + );
int mid = (l + r) >> ;
int ret = ; if(val <= mid) ret = QueryPoint(l, mid, rt << , val);
else ret = QueryPoint(mid + , r, rt << | , val); pushup(rt);
return ret;
}
int QuerySegment(int l, int r, int rt, int L, int R) {
pushdown(rt, r - l + ); if(L == l && R == r) return data[rt]; int mid = (l + r) >> ; if(R <= mid) return QuerySegment(l, mid, rt << , L, R); if(mid < L) return QuerySegment(mid + , r, rt << | , L, R); return max(QuerySegment(l, mid, rt << , L, mid), QuerySegment(mid + , r, rt << | , mid + , R));
}
};
SegmentTree st();
int h[]; int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(), cin.tie();
memset(h, , sizeof(h));
st.Build(h, , , );
int n, l, r;
cin >> n; for(int i = ; i < n; i++) {
cin >> l >> r;
int tmp = st.QuerySegment(, , , l, r);
cout << (tmp + ) << endl;
st.Modify(, , , l, r, tmp + );
} return ;
}
[Offer收割]编程练习赛40的更多相关文章
- HihoCoder1665方块游戏([Offer收割]编程练习赛40)(线段树)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho在玩一款类似俄罗斯方块的游戏.与原版俄罗斯方块不同的是,落下方块都是长度不一的横向长条,并且不能移动也不能变成竖直方 ...
- HihoCoder1664 01间隔方阵([Offer收割]编程练习赛40)(DP)
给定一个NxM的01矩阵,小Hi希望从中找到一个01间隔的子方阵,并且方阵的边长越大越好. 例如对于 0100100 1000101 0101010 1010101 0101010 在右下角有一个4x ...
- HihoCoder1663双阶乘的末尾数字([Offer收割]编程练习赛40)(暴力||数学)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定正整数x和k,判断是否存在正整数1 ≤ y ≤ x使得x与y同奇偶且(x!!)/(y!!)的个位数字为k. 其中x!! ...
- Hihocoder1662 : 查找三阶幻方([Offer收割]编程练习赛40)(暴力)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个N x M的矩阵,请你数一数其中有多少个3 x 3的子矩阵可以构成三阶幻方? 如果3 x 3的矩阵中每一行.每一列 ...
- 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 分析
- [Offer收割]编程练习赛48
题目1 : 折线中点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定平面上N个点P1, P2, ... PN,将他们按顺序连起来,形成一条折线. 请你求出这条折线的 ...
- [Offer收割]编程练习赛13 B.最大子矩阵[枚举]
#1502 : 最大子矩阵 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个NxM的矩阵A和一个整数K,小Hi希望你能求出其中最大(元素数目最多)的子矩阵,并且该 ...
随机推荐
- pycharm主题 变量颜色 自定义
File--Settings--Edtior--Color Schame-- Lanuage Defaults
- python时间序列按频率生成日期
有时候我们的数据是按某个频率收集的,比如每日.每月.每15分钟,那么我们怎么产生对应频率的索引呢?pandas中的date_range可用于生成指定长度的DatetimeIndex.我们先看一下怎么生 ...
- 3D模型在UI上显示的方法(Unity)
方法:使用RawImage通过Render Texter将摄像机下的物体渲染纹理记录并显示在RawImage上面 具体实现:新建一个模型(Cube),新建一个摄像机,将Clear Flags设置为So ...
- Java 将File转换为MultipartFile类型
首先转换时需要用到commons-fileupload-1.3.2.jar包,若项目中没有就先加入jar包,实现代码如下: 1.根据File创建FileItem import java.io.File ...
- UIAutomator定位简介
UIAutomator元素定位是 Android 系统原生支持的定位方式,虽然与 xpath 类似,但比它更加好用,且支持元素全部属性定位.定位原理是通过android 自带的android uiau ...
- jupyter notebook主目录修改
转自http://blog.csdn.net/c437yuyang/article/details/54836303 1.打开 cmd 输入命令 jupyter notebook --generate ...
- 爬虫系列(八) 用requests实现天气查询
这篇文章我们将使用 requests 调用天气查询接口,实现一个天气查询的小模块,下面先贴上最终的效果图 1.接口分析 虽然现在网络上有很多免费的天气查询接口,但是有很多网站都是需要注册登陆的,过程比 ...
- SBC37x交叉编译平台QT+OPENCV【2】虚拟机Vbox下Ubuntu的磁盘扩容
虚拟机Vbox下Ubuntu,当初为了学习,仅仅分配了8g,结果qt,opencv等一上,就说room空间不够了.于是开始折腾磁盘扩容. 网上一大堆,也不知道有多少是自己动手走过,正是不但浪费别人时间 ...
- NodeJS的安装与使用
Node.js 就是运行在服务端的 JavaScript.越来越多的人在使用它,通过他我们可以用JavaScript来构建后台.对于前端程序员而言,不言而喻这是一条多么令人振奋的消息.对于后台程序员而 ...
- hdu 1713求分数的最小公倍数
题意中的圈数和天数说反了 #include<stdio.h> __int64 gcd(__int64 a,__int64 b) {/* 比如4/3 3/5 通分20/15 9/15 所以这 ...