版权声明:欢迎指出文章不足之处~~~ https://blog.csdn.net/zhui_xiuge/article/details/81592136
1. 度度熊拼三角
分析: 看最紧临的并且尽可能长的3根木棒是否构成三角形
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1005;
bool cmp(const int& a, const int& b) {
return a > b;
}
int main() {
int len[N];
int n;
while (cin >> n) {
for (int i = 0; i < n; i++) cin >> len[i];
sort(len, len + n, cmp);
int ans = 0;
for (int i = 1; i < n-1; i++) {
if (len[i] + len[i + 1] > len[i - 1]) {
for (int k = i - 1; k <= i + 1; k++) ans += len[k];
break;
}
}
cout << (ans ? ans : -1) << '\n';
}
return 0;
}
2 . 度度熊学队列
分析: 无脑deque模拟
就ac啦,当然,如果像题解那样开双向链表
,同时记录一下首尾指针的位置,那么每次“合并”的时候就可以直接O(1)暴力”对接”,显然较deque模拟省时,时间复杂度为O(Q)
#include <iostream>
#include <cstdio>
#include <deque>
using namespace std;
const int N = 150005;
deque<int> deq[N];
int n, q, opt, u, v, w, val;
void read(int &x) { //
char ch = getchar(); x = 0;
for (; ch < '0' || ch > '9'; ch = getchar());
for (; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
}
//deque:在结尾或起始插入或移除元素——常数 O(1)
//clear:与容器大小成线性
void operate() {
read(opt);
if (opt == 1) {
read(u), read(w), read(val);
if (w == 0) deq[u].push_front(val);
else deq[u].push_back(val);
}
else if (opt == 2) {
read(u), read(w);
if (deq[u].empty()) printf("-1\n");
else {
if (w == 0) printf("%d\n",deq[u].front()), deq[u].pop_front();
else printf("%d\n", deq[u].back()), deq[u].pop_back();
}
}
else {
read(u), read(v), read(w);
if (w == 0) {
for (int i = 0; i < deq[v].size(); i++) {
deq[u].push_back(deq[v].at(i));
}
}
else {
for (int i = deq[v].size()-1; i >=0 ; i--) {
deq[u].push_back(deq[v].at(i));
}
}
if (!deq[v].empty()) deq[v].clear();
}
}
int main() {
while (scanf("%d%d", &n, &q) != EOF) {
for (int i = 1; i <= n; i++) if (!deq[i].empty()) deq[i].clear();
while (q--) {
operate();
}
}
return 0;
}