BestCoder #86

news/2024/11/17 9:52:16/

BestCoder #86

今年暑假最后一次BC了,结果B题少加了个判断终测WA了,很不爽......

1001 Price List [hdu 5804]签到题

求出所有数的和sumsum,如果q > sumq>sum那么肯定记多了。

时间复杂度O(n)O(n)

以上是引用官方题解...

#include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <string>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <algorithm>
using namespace std;//#pragma comment(linker, "/STACK:1024000000,1024000000")#define FIN             freopen("input.txt","r",stdin)
#define FOUT            freopen("output.txt","w",stdout)
#define fst             first
#define snd             second
#define lson            l, mid, rt << 1
#define rson            mid + 1, r, rt << 1 | 1typedef __int64  LL;
//typedef long long LL;
typedef unsigned int uint;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;const double PI = 3.1415926536;
const double eps = 1e-6;
const int MAXN = 100000 + 5;int T, N, M;
int V[MAXN];
LL Q, SUM;int main() {
#ifndef ONLINE_JUDGEFIN;// FOUT;
#endif // ONLINE_JUDGEscanf ("%d", &T);while (T--) {scanf ("%d %d", &N, &M);SUM = 0LL;for (int i = 1; i <= N; i++) {scanf ("%d", &V[i]);SUM += V[i];}for (int i = 1; i <= M; i++) {scanf ("%I64d", &Q);if (Q > SUM) {putchar ('1');continue;} else {putchar ('0');}}putchar ('\n');}return 0;
}

1002 NanoApe Loves Sequence[hdu 5805]

求出前ii个数里相邻差值的最大值f_ifiiinn里相邻差值的最大值g_igi,那么ans=\sum_{i=1}^n \max(|A_{i-1}-A_{i+1}|,f_{i-1},g_{i+1})ans=i=1nmax(Ai1Ai+1,fi1,gi+1)

时间复杂度O(n)O(n)

以上是引用官方题解...

我的做法是求出N个数相邻的最大值,然后将删除第一个节点和删除最后一个节点和删除中间节点分开来算。

#include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <string>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <algorithm>
using namespace std;//#pragma comment(linker, "/STACK:1024000000,1024000000")#define FIN             freopen("input.txt","r",stdin)
#define FOUT            freopen("output.txt","w",stdout)
#define fst             first
#define snd             second
#define lson            l, mid, rt << 1
#define rson            mid + 1, r, rt << 1 | 1typedef __int64  LL;
//typedef long long LL;
typedef unsigned int uint;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;const double PI = 3.1415926536;
const double eps = 1e-6;
const int MAXN = 100000 + 5;int T, N, M;
int A[MAXN];
PII F[MAXN];
int main() {
#ifndef ONLINE_JUDGEFIN;
#endif // ONLINE_JUDGEscanf ("%d", &T);while (T--) {scanf ("%d", &N);for (int i = 1; i <= N; i++) {scanf ("%d", &A[i]);}LL res = 0LL;for (int i = 1; i <= N - 1; i++) {F[i].fst = abs (A[i + 1] - A[i]);F[i].snd = i;}sort (F + 1, F + N);reverse (F + 1, F + N);/// delete 1if (F[1].snd == 1) res += F[2].fst;else res += F[1].fst;/// delete Nif (F[1].snd == N - 1) res += F[2].fst;else res += F[1].fst;/// delete 2 ~ N-1for (int i = 2, w; i <= N - 1; i++) {w = abs (A[i + 1] - A[i - 1]);int p = 1;while (F[p].snd == i || F[p].snd == i - 1) p++;if(p == N) res += w;    /// 竟然在这里没有加判断, Too Young Too Simple!...else res += max (w, F[p].fst);}printf("%I64d\n", res);}return 0;
}

1002 NanoApe Loves Sequence[hdu 5806]


将不小于mm的数看作11,剩下的数看作00,那么只要区间内11的个数不小于kk则可行,枚举左端点,右端点可以通过two-pointer求出。

时间复杂度O(n)O(n)

看了题解之后恍然大悟的感觉...

#include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <string>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <algorithm>
using namespace std;//#pragma comment(linker, "/STACK:1024000000,1024000000")#define FIN             freopen("input.txt","r",stdin)
#define FOUT            freopen("output.txt","w",stdout)
#define fst             first
#define snd             second
#define lson            l, mid, rt << 1
#define rson            mid + 1, r, rt << 1 | 1typedef __int64  LL;
//typedef long long LL;
typedef unsigned int uint;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;const int MAXN = 200000 + 5;int T, N, M, K;
int pre[MAXN];int main() {
#ifndef ONLINE_JUDGEFIN;
#endif // ONLINE_JUDGEscanf ("%d", &T);while (T--) {scanf ("%d %d %d", &N, &M, &K);pre[0] = 0;for (int i = 1, temp; i <= N; i++) {scanf ("%d", &temp);pre[i] = pre[i - 1] + (int) (temp >= M);}LL res = 0LL;int L, R, v, p = 1;for (int i = 1; i <= N; i++) {L = i, R = K + L - 1;if (R > N) break;v = pre[L - 1] + K;while (p <= N && pre[p] < v) p++;if (pre[p] < v) break;res += N - p + 1;}printf ("%I64d\n", res);}return 0;
}



http://www.ppmy.cn/news/578855.html

相关文章

86、87、88

#include <iostream> #include <stack> #include <queue> using namespace std; int main() { int a[] {5, 1, 4, 6}; cout << "存放整型元素的栈的操作&#xff1a;" << endl; stack<int> iStack; for (int i 0; i < 4; i…

leetcode 86

先找到第一个大于等于target的数p&#xff0c;然后从这个数开始往后遍历链表&#xff0c;若比target小则放在p之前 ListNode* partition(ListNode* head, int x) {ListNode* dummy new ListNode(-1);dummy->next head;ListNode *p dummy;ListNode *q head;while(p->…

x86-64和x86

因为X86-64的CPU&#xff0c;意思就是64位的cpu。   x86是英特尔首先开发制造的一种微处理器体系结构的泛称。该系列较早期的处理器名称是以86数字作为结尾来表示&#xff0c;因此其架构被称为“x86&#xff0c;把x86-32称为32-bit”。 由于处理器的发展遇到了瓶颈&#xf…

86.样式表 QSS

qss和css差不多&#xff0c;是css的弱化版 我们起始先搞一个Box1和Box2,然后分别设置背景颜色 目录 1 回顾setStyleSheet() 2 回顾背景颜色 background-color 3 认识选择器 4 qss文件 5 回顾边框 border 6 了解伪状态 7 详细讲解选择器 7.1 通配符选择器 * 7…

Codeforces 86C

自动机dp dp[i][j][k]在i节点字符串长度为j最小的未匹配位置k /f[u]r,r&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;u&#xfffd;ĺ&#xfffd;׺&#xfffd;&#xfffd; /last[u]r,r&#xfffd;&#xfffd;&#xfffd;&#xfffd;&am…

80*86 指令

实地址模式 保护虚地址模式。 1 实地址&#xff1a; 存储器20位物理地址&#xff1b;1MB&#xff1b;LMSW指令设置机器状态字 MSW中的PE状态&#xff0c;可使 80286进入保护虚地址模式。 2 保护虚地址模式&#xff1a; 设计用来增强 多工 和系统稳定度&#xff0c;像是 内存保…

手机号码格式化得到带86和不带86的号码

/*** 得到不带86开头的号码* * param phoneNumber* return*/ public static String getNoWith86Number(String number) {String regular number;if (StringUtils.isNotBlank(regular)) {// 去掉号while(regular.startsWith("")) {regular regular.substring(1);}//…

leetcode 86.分割链表

leetcode 86.分割链表 题目描述 给定一个链表和一个特定值 x&#xff0c;对链表进行分隔&#xff0c;使得所有小于 x 的节点都在大于或等于 x 的节点之前。 你应当保留两个分区中每个节点的初始相对位置。 示例: 输入: head 1->4->3->2->5->2, x 3 输出: 1…