不到一个小时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的更多相关文章

  1. HihoCoder1665方块游戏([Offer收割]编程练习赛40)(线段树)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho在玩一款类似俄罗斯方块的游戏.与原版俄罗斯方块不同的是,落下方块都是长度不一的横向长条,并且不能移动也不能变成竖直方 ...

  2. HihoCoder1664 01间隔方阵([Offer收割]编程练习赛40)(DP)

    给定一个NxM的01矩阵,小Hi希望从中找到一个01间隔的子方阵,并且方阵的边长越大越好. 例如对于 0100100 1000101 0101010 1010101 0101010 在右下角有一个4x ...

  3. HihoCoder1663双阶乘的末尾数字([Offer收割]编程练习赛40)(暴力||数学)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定正整数x和k,判断是否存在正整数1 ≤ y ≤ x使得x与y同奇偶且(x!!)/(y!!)的个位数字为k. 其中x!! ...

  4. Hihocoder1662 : 查找三阶幻方([Offer收割]编程练习赛40)(暴力)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个N x M的矩阵,请你数一数其中有多少个3 x 3的子矩阵可以构成三阶幻方? 如果3 x 3的矩阵中每一行.每一列 ...

  5. hihocoder [Offer收割]编程练习赛4

    描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...

  6. hihocoder [Offer收割]编程练习赛61

    [Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...

  7. [Offer收割]编程练习赛46

    [Offer收割]编程练习赛46赛后题解 A.AEIOU 分析

  8. [Offer收割]编程练习赛48

    题目1 : 折线中点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定平面上N个点P1, P2, ... PN,将他们按顺序连起来,形成一条折线. 请你求出这条折线的 ...

  9. [Offer收割]编程练习赛13 B.最大子矩阵[枚举]

    #1502 : 最大子矩阵 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个NxM的矩阵A和一个整数K,小Hi希望你能求出其中最大(元素数目最多)的子矩阵,并且该 ...

随机推荐

  1. (转)基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作

    http://www.cnblogs.com/wuhuacong/p/4093778.html 在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界 ...

  2. (转)基于MVC4+EasyUI的Web开发框架经验总结(12)--利用Jquery处理数据交互的几种方式

    http://www.cnblogs.com/wuhuacong/p/4085682.html 在基于MVC4+EasyUI的Web开发框架里面,大量采用了Jquery的方法,对数据进行请求或者提交, ...

  3. matlab学习菜单控件的基本用法

    编辑菜单项 上下文菜单,即弹出菜单 然后添加一个坐标系 添加回调函数 %余弦曲线x=0:0.01:2*pi;y=cos(x);axes(handles.axes1);%将坐标系的值写进h=plot(x ...

  4. BZOJ : [Usaco2013 Nov]Crowded 单调队列

    正反两遍个来一次单调队列 DP 即可. Code: #include<cstdio> #include<deque> #include<algorithm> usi ...

  5. Linux 性能检查命令总结

    iostat -x 1 查看磁盘的IO负载 Linux系统出现了性能问题,一般我们可以通过top.iostat,vmstat等命令来查看初步定位问题.其中iostat可以给我们提供丰富的IO状态数据 ...

  6. leetcode 188-maxProfit

    public static int maxProfit(int k, int[] prices) { if (0 >= k || null == prices || 1 >= prices ...

  7. 操作符重载(day07)

    二十 操作符重载 eg:复数x+yi +4i (+2i) + (+4i) = +6i 双目操作符(L # R) 1.1 运算类的双目操作符:+ - * / -->左右操作数可以是左值也可以是右值 ...

  8. 51nod1183 编辑距离【动态规划】

    编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除 ...

  9. Xcache3.2.0不支持php7.0.11

    编译安装xcache3.2.0时在make这一步报错: AUTOCHECK missing : "arg_flags" "cache_size" AUTOCHE ...

  10. 24.基于groovy脚本进行partial update

    主要知识点 在es中其实是有内置的脚本支持的,可以基于groovy脚本实现各种各样的复杂操作 基于groovy脚本,如何执行partial update es scripting module,我们会 ...