短学期 线性复杂度优化 / 离散化
2020-07-12 22:41
141 查看
https://www.luogu.com.cn/problem/P1950
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define N 1007 #define int long long using namespace std; int n, m, now, ans; int high[N]; signed main() { //scanf("%lld%lld", &n, &m); ios_base::sync_with_stdio(false); cin >> n >> m; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) { char in; //scanf(" %c", &in); cin >> in; if (in == '.') ++high[j]; else high[j] = 0; } for (int j = 1; j <= m; ++j) { now = high[j]; for (int k = j; k <= m; ++k) { if (!high[k]) break; now = min(now, high[k]); ans += now; } } } //printf("%lld", ans); cout << ans << endl; return 0; }
思路:以一个方块作为左下角的方块
https://www.luogu.com.cn/problem/P2032
#include <cstdio> #include <iostream> #include <queue> using namespace std; const int N = 2e6 + 6; int a[N]; int n, k; priority_queue< pair<int, int> >q; int main() { ios_base::sync_with_stdio(false); cin >> n >> k; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= n; i++) { q.push(make_pair(a[i], i)); //按照a[i]由大到小排序 if (i >= k) { while (q.top().second <= i - k) q.pop(); //printf("%d\n", q.top().first); cout << q.top().first << endl; } } return 0; }
https://www.luogu.com.cn/problem/P1102
#include<iostream> #include<algorithm> using namespace std; int p[200005], n, c; int main() { ios_base::sync_with_stdio(false); cin >> n >> c; int i, num; long long ans;//注意 for (i = 0; i < n; i++) { cin >> p[i]; } sort(p, p + n); for (i = 0; i < n; i++) { ans += ((upper_bound(p, p + n, p[i] + c)-p) - (lower_bound(p, p + n, p[i] + c)-p)); } cout << ans << endl; return 0; }
对于upper_bound来说,返回的是被查序列中第一个大于查找值的指针,也就是返回指向被查值>查找值的最小指针,lower_bound则是返回的是被查序列中第一个大于等于查找值的指针,也就是返回指向被查值>=查找值的最小指针。
https://www.luogu.com.cn/problem/P1147
//用数学方法解一元二次方程 #include<iostream> #include<cmath> using namespace std; int main() { int M, m, n; cin >> M; long long s = 0; for (m = 1; m <= M / 2; m++) { s = 1 + 4 * (pow(m, 2) - m + 2 * M); s = sqrt(s); n = (s - 1) / 2; if (m - pow(m, 2) + pow(n, 2) + n == 2 * M&&n>m) { cout << m << " " << n << endl; } } return 0; }
相关文章推荐
- #(离散化优化线性DP)P1052 过河(提高+/省选-)
- 优化复杂listview的一些思考
- 从dct简单了解一种线性汇编优化方法
- 【基础算法】排序-复杂排序之一(归并排序的两种优化讨论)
- 最小的最小公约数_最小化措施,在复杂的环境中保持最小的稳定性(这将帮助您优化Scrum)...
- 2.3 线性回归算法学习——向量化运算优化回归算法
- [poj 3666] Making the Grade (离散化 线性dp)
- 请朋友帮忙优化一下下面的代码,降低其时间复杂度。。。
- [网络流24题] 20 深海机器人 (线性规划网络优化 ,最小费用最大流)
- 经典面试题:Java实现-归并K条已排序的链表及复杂度分析、优化
- Win10内置的反馈应用中:开始菜单复杂,程序列表需优化
- Mayor's posters(离散化优化喵与线段树喵~)
- 矩阵快速幂求斐波那契通项(矩阵乘法优化线性递推式)
- DFS优化,数学题,时间复杂度计算题
- 设计算法将线性表中的元素分为两部分,要求左边都是奇数,右边都是偶数,时间复杂度O(n),空间复杂度O(1)
- hdu5009 离散化+dp+优化
- UITableView性能优化-复杂页面的优化
- 求一个整型数组的最大和的子数列,要求时间复杂度为线性的
- hdoj 3450 Counting Sequences 【离散化 + 树状数组优化dp】
- 最大字段和 时间复杂度线性阶 java