当前位置: 首页 > news >正文

ABC340

C

黑板上给一个数N,一直不停重复到黑板上的数组里面只剩下1:
擦去每个大于1的数n
加入 ⌊ n 2 ⌋ 和 ⌈ n 2 ⌉ \lfloor \frac n 2 \rfloor和 \lceil \frac n 2 \rceil 2n2n
每擦一个数n计入分数n
求最后的总分数


用map记录一下每个n的总得分

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
#include <unordered_map>
#include <algorithm>using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;ll n;
map<ll, ll> h;ll get(ll x) {if (h.count(x)) return h[x];if (x == 1) return 0;if (x % 2 == 0) {return h[x] = get(x / 2) * 2 + x;}else {return h[x] = get(x / 2) + get(x / 2 + 1) + x;}
}int main(){//freopen("in.txt", "r", stdin);cin >> n;ll ans = get(n);printf("%lld\n", ans);return 0;
}

D

1…N的一个数组,一开始在格子1
对于格子i有两个操作,一个花费 A i A_i Ai到i+1,第二个花费 B i B_i Bi到d
求最后到N的最小花费


优先队列

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
#include <unordered_map>
#include <algorithm>using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;int n;
int a[200020], b[200020], x[200020];
ll f[200020];
vector<pair<int, ll>> g[200020];struct Node {ll w;int u;bool operator < (const Node& rhs) const {return w > rhs.w;}
};int main(){//freopen("in.txt", "r", stdin);cin >> n;memset(f, 0x33, sizeof(f));f[1] = 0;for (int i = 1; i < n; ++i) {cin >> a[i] >> b[i] >> x[i];g[i].push_back({ x[i], b[i] });g[i].push_back({ i + 1, a[i] });}priority_queue<Node> qu;qu.push({ 0, 1 });while (qu.size()) {auto [w, u] = qu.top();qu.pop();if (u == n) {break;}for (auto [v, tw]: g[u]) {if (w + tw < f[v]) {f[v] = w + tw;qu.push({ f[v], v });}}}printf("%lld\n", f[n]);return 0;
}

E

围成一圈的n个格子,每个格子里都放着 A i A_i Ai个球
m个操作,格子 M i M_i Mi
将格子里面的球拿出来,按顺序依次放到所有格子里面,每次放一个
求最后每个格子里有几个球


对单点更新(清零)–就是区间更新,单点查询,裸的线段树。BIT+差分也可。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
#include <unordered_map>
#include <algorithm>using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;int n, m;
const int N = 200020;
ll a[N];
#define lu (u * 2)
#define ru (u * 2 + 1)struct SegTree {struct Node {int l, r;ll val, add;}tr[N << 2];void push_down(int u) {if (tr[u].add) {tr[lu].add += tr[u].add;tr[ru].add += tr[u].add;tr[u].add = 0;}}public:void build(int l, int r, int u) {tr[u].l = l, tr[u].r = r, tr[u].add = 0;if (l == r) {tr[u].val = a[l];return;}int mi = (l + r) / 2;build(l, mi, lu);build(mi + 1, r, ru);}void update(int l, int r, int u, ll v) {if (l <= tr[u].l && tr[u].r <= r) {tr[u].add += v;return;}push_down(u);int mi = (tr[u].l + tr[u].r) / 2;if (mi >= l)update(l, r, lu, v);if (mi < r) update(l, r, ru, v);}ll query(int p, int u) {if (tr[u].l == tr[u].r) {return tr[u].val + tr[u].add;}push_down(u);int mi = (tr[u].l + tr[u].r) / 2;if (p <= mi) return query(p, lu);else return query(p, ru);}
} seg;int main(){//freopen("in.txt", "r", stdin);cin >> n >> m;for (int i = 1; i <= n; ++i) cin >> a[i];seg.build(1, n, 1);for (int i = 0; i < m; ++i) {int t;cin >> t;t++;ll c = seg.query(t, 1);seg.update(t, t, 1, -c);seg.update(1, n, 1, c / n);ll r = c % n;if (r) {if (t + r <= n) {seg.update(t + 1, t + r, 1, 1);}else {if (t < n) {seg.update(t + 1, n, 1, 1);}seg.update(1, r - (n - t), 1, 1);}}}for (int i = 1; i <= n; ++i) {ll c = seg.query(i, 1);printf("%lld ", c);}printf("\n");return 0;
}

F

给(0,0)点和(X,Y)点,求任意(A,B)点使得三角形面积为1


三角形面积公式
x 1 y 2 + x 2 y 3 + x 3 y 1 − x 1 y 3 − x 2 y 1 − x 3 y 2 = S x_1y_2+x_2y_3+x_3y_1-x_1y_3-x_2y_1-x_3y_2=S x1y2+x2y3+x3y1x1y3x2y1x3y2=S
化简为 a y − b x = 2 ay-bx=2 aybx=2
扩展欧几里得做就好了

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
#include <unordered_map>
#include <algorithm>using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;ll X, Y;
// ax - by = 2ll gcd(ll a, ll b) {if (a < b) swap(a, b);if (b == 0) return a;return gcd(b, a % b);
}ll exgcd(ll a, ll b, ll& x, ll& y) {if (b == 0) {x = 1, y = 0;return a;}ll x0, y0;ll d = exgcd(b, a % b, x0, y0);// b x0 + a%b y0 = d// b x0 + (a - (a / b)b) y0 = d// b x0 + a y0 - (a / b) b y0 = d// b(x0 - (a/b) y0) + a y0 = d// by + ax = d// y = x0 - (a/b)y0, x = y0y = x0 - (a / b) * y0, x = y0;return d;
}int main(){//freopen("in.txt", "r", stdin);cin >> X >> Y;ll lx = abs(X), ly = abs(Y);ll d = gcd(lx, ly);if (d > 2) {printf("-1\n");return 0;}ll x, y;exgcd(X, Y, y, x);y = -y;if (d == 1) {printf("%lld %lld\n", x * 2, y * 2);}else {printf("%lld %lld\n", x, y);}return 0;
}

http://www.mrgr.cn/news/47146.html

相关文章:

  • 优化神马关键词排名原理(优化神马搜索引擎关键词排名规则)
  • 系统架构设计师考点—项目管理
  • 浅谈云计算01 | 云计算服务的特点
  • 【Leetcode 每日一题】3298. 统计重新排列后包含另一个字符串的子字符串数目 II
  • Chromium 中的 WebUI
  • JavaScript高级程序设计基础(十三)
  • 人像抠图怎么好看?1分钟教会你
  • 【高等代数笔记】线性空间(十九-二十四上半部分)
  • LangChain: AI大语言模型的新篇章
  • 2.1 App测试与发布指南
  • 剧本杀小程序:提升玩家游戏体验,带动经济效益
  • Meta推出的AI视频音频生成模型:Movie Gen
  • 数据排列组合实现
  • CentOS系统解压缩.7z后缀的文件
  • jenkins中的allure和email问题梳理
  • java通知提醒实现使用`java.util.Timer`或`ScheduledExecutorService`进行定时提醒
  • Unicode
  • 12.JVM类加载机制
  • 2024年诺贝尔物理学奖2
  • 怎么高效对接SaaS平台数据?
  • ITSS-IT服务工程师和ITSS-IT服务经理的区别
  • GEE 错误:Can‘t transform (11121.0,18905.0),Can‘t transform (-1.0,-1.0)
  • C#中ref关键字和out关键字
  • LeetCode 2831.找出最长等值子数组(cpp, python3)
  • 深入理解 Vue.js 事件修饰符与事件冒泡:实战指南20241010
  • 基于RAMS的台风苏拉(Saola)模拟预报深入分析引言