牛客国庆集训派对Day5 Solution
A 璀璨光滑
留坑。
B 电音之王
蒙特马利大数乘模运算
#include <bits/stdc++.h>
using namespace std; typedef long long ll;
typedef unsigned long long u64;
typedef __int128_t i128;
typedef __uint128_t u128; struct Mod64 {
Mod64() :n_() {}
Mod64(u64 n) :n_(init(n)) {}
static u64 init(u64 w) { return reduce(u128(w) * r2); }
static void set_mod(u64 m) {
mod = m; assert(mod & );
inv = m; for (int i = ; i < ; ++i) inv *= - inv * m;
r2 = -u128(m) % m;
}
static u64 reduce(u128 x) {
u64 y = u64(x >> ) - u64((u128(u64(x)*inv)*mod) >> );
return ll(y)< ? y + mod : y;
}
Mod64& operator += (Mod64 rhs) { n_ += rhs.n_ - mod; if (ll(n_)<) n_ += mod; return *this; }
Mod64 operator + (Mod64 rhs) const { return Mod64(*this) += rhs; }
Mod64& operator -= (Mod64 rhs) { n_ -= rhs.n_; if (ll(n_)<) n_ += mod; return *this; }
Mod64 operator - (Mod64 rhs) const { return Mod64(*this) -= rhs; }
Mod64& operator *= (Mod64 rhs) { n_ = reduce(u128(n_)*rhs.n_); return *this; }
Mod64 operator * (Mod64 rhs) const { return Mod64(*this) *= rhs; }
u64 get() const { return reduce(n_); }
static u64 mod, inv, r2;
u64 n_;
}; u64 Mod64::mod, Mod64::inv, Mod64::r2; int t, k;
u64 A0, A1, M0, M1, C, M; void Run()
{
scanf("%d", &t);
while (t--)
{
scanf("%llu%llu%llu%llu%llu%llu%d", &A0, &A1, &M0, &M1, &C, &M, &k);
Mod64::set_mod(M);
Mod64 a0(A0), a1(A1), m0(M0), m1(M1), c(C), ans(), a2();
ans *= a0; ans *= a1;
for (int i = ; i <= k; ++i)
{
a2 = a1;
a1 = m0 * a1 + m1 * a0 + c;
a0 = a2;
ans *= a1;
}
printf("%llu\n", ans.get());
}
} int main()
{
#ifdef LOCAL
freopen("Test.in", "r", stdin);
#endif Run();
return ;
}
C 萌新拆塔
留坑。
D 奇迹暖婊
留坑。
E 风花雪月
留坑。
F 双倍掉率
留坑。
G 贵族用户
枚举VIP等级,注意精度问题 不要用(1-p * 0.01) 用 (100 - p) * 1.0 / 100
#include<bits/stdc++.h> using namespace std; const int maxn = 1e2 + ; int m, k;
int a[maxn], p[maxn], c[maxn], d[maxn]; int main()
{
int t;
scanf("%d", &t);
while(t--)
{
scanf("%d %d", &m, &k);
for(int i = ; i <= m; ++i) scanf("%d %d", a + i, p + i);
for(int i = ; i <= k; ++i) scanf("%d %d", c + i, d + i);
int ans = 0x3f3f3f3f;
//for(int i = 1; i <= k; ++i) ans += c[i] * d[i];
for(int i = ; i <= m; ++i)
{
int res = ;
for(int j = ; j <= k; ++j)
{
int tmp = (int)ceil(d[j] * (100.0 - p[i]) / 100.0);
res += tmp * c[j];
}
if(res < a[i]) res = a[i];
ans = min(ans, res);
}
ans = (int)ceil(ans * 0.1);
printf("%d\n", ans);
}
return ;
}
H 我不爱她
留坑。
I 人渣本愿
留坑。
J 友谊巨轮
用线段树维护每个人对其他人的聊天记录,然后取max上去,但是开1e5棵线段树肯定空间爆炸,考虑动态开点,每次最多开logn个结点
#include <bits/stdc++.h>
using namespace std; #define N 100010
#define ll long long int t, n, m, k;
int root[N], res; struct SEG
{
#define M N * 35
int cnt, lson[M], rson[M];
struct node
{
int tm, pos;
ll Max;
bool operator < (const node &r) const
{
return Max == r.Max ? tm < r.tm : Max < r.Max;
}
}a[M]; void pushup(int id)
{
a[id] = max(a[lson[id]], a[rson[id]]);
} void update(int &root, int l, int r, ll val, int tm, int pos)
{
if (!root)
{
root = ++cnt;
lson[root] = rson[root] = ;
a[root].Max = a[root].tm = a[root].pos = ;
}
if (l == r)
{
a[root].Max += val;
a[root].tm = max(a[root].tm, tm);
a[root].pos = pos;
return;
}
int mid = (l + r) >> ;
if (pos <= mid) update(lson[root], l, mid, val, tm, pos);
else update(rson[root], mid + , r, val, tm, pos);
pushup(root);
}
}segtree; void Init()
{
segtree.cnt = ;
memset(root, , sizeof root);
res = ;
} struct OP
{
int a, b, c, tm;
void scan(int tm)
{
this->tm = tm;
scanf("%d%d%d", &a, &b, &c);
}
}op[N]; void update(int a, int b, int c, int tm)
{
int bef = segtree.a[root[a]].pos;
segtree.update(root[a], , n, c, tm, b);
int now = segtree.a[root[a]].pos;
if (bef == now) return;
if (bef)
{
if (segtree.a[root[bef]].pos == a) ++res;
else --res;
}
if (now)
{
if (segtree.a[root[now]].pos == a) --res;
else ++res;
} } void Run()
{
segtree.a[].tm = ; // 防止取max操作时误把空节点pushup上去
scanf("%d", &t);
while (t--)
{
Init();
scanf("%d%d%d", &n, &k, &m);
for (int i = ; i <= k; ++i)
{
op[i].scan(i);
update(op[i].a, op[i].b, op[i].c, i);
update(op[i].b, op[i].a, op[i].c, i);
if (i > m)
{
update(op[i - m].a, op[i - m].b, -op[i - m].c, i - m);
update(op[i - m].b, op[i - m].a, -op[i - m].c, i - m);
}
printf("%d\n", res);
}
}
} int main()
{
#ifdef LOCAL
freopen("Test.in", "r", stdin);
#endif Run();
return ;
}
K 最后战役
留坑。
L 数论之神
两个规律,在代码中。
#include <bits/stdc++.h>
using namespace std; #define ll long long int T;
ll n, k; int main()
{
scanf("%d", &T);
while (T--)
{
scanf("%lld%lld", &n, &k);
ll t = (ll)sqrt(n);
// cout << t << endl;
ll num = t * (t + ) <= n ? * t : * t - ;
k = num - k + ;
ll K = k <= t ? k : n / (num - k + );
printf("%lld %lld\n", num, K);
}
return ;
}
牛客国庆集训派对Day5 Solution的更多相关文章
- 2019牛客国庆集训派对day5
2019牛客国庆集训派对day5 I.Strange Prime 题意 \(P=1e10+19\),求\(\sum x[i] mod P = 0\)的方案数,其中\(0 \leq x[i] < ...
- 牛客国庆集训派对Day2 Solution
A 矩阵乘法 思路: 1° 牛客机器太快了,暴力能过. #include <bits/stdc++.h> using namespace std; #define N 5000 in ...
- 牛客国庆集训派对Day4 Solution
A 深度学习 puts(n) #include <bits/stdc++.h> using namespace std; int main() { double n; while ( ...
- 牛客国庆集训派对Day5 数论之神
题目描述 终于活成了自己讨厌的样子. 这是她们都还没长大的时候发生的故事.那个时候,栗子米也不需要为了所谓的爱情苦恼. 她们可以在夏日的午后,花大把的时间去研究生活中一些琐碎而有趣的事情,比如数论. ...
- 牛客国庆集训派对Day1 Solution
A Tobaku Mokushiroku Kaiji 水. #include <bits/stdc++.h> using namespace std; ], b[]; void Ru ...
- 牛客国庆集训派对Day3 Solution
A Knight 留坑. B Tree 思路:两次树形DP,但是要考虑0没有逆元 可以用前缀后缀做 #include <bits/stdc++.h> using namespa ...
- 牛客国庆集训派对Day6 Solution
A Birthday 思路:设置一个源点,一个汇点,每次对$源点对a_i, b_i , a_i 对 b_i 连一条流为1,费用为0的边$ 每个点都再连一条 1, 3, 5, 7, ....的边到 ...
- 牛客国庆集训派对Day7 Solution
A Relic Discovery 水. #include <bits/stdc++.h> using namespace std; int t, n; int main() { s ...
- 牛客国庆集训派对Day5 A.璀璨光滑
首先我们可以确认 1的值一定是0 题目要求的是 有边的两个点所代表的值二进制有一位不同(即有边相连的两个值二进制所包含的1的个数相差为1) 所以我们通过他给你的图进行BFS 把原图分为一圈一圈的 并且 ...
随机推荐
- 告别C#,进入了下一个阶段的学习啦
嘿嘿,今天我们结束了C#的基础的学习,开始啦第二个阶段的学习,就是对SQL Server的学习.今天又是一个周一,又是一个新的开始,感觉我们都是一周一周的计算,而不是每天到这个点就是告别了今天的生活啦 ...
- windbg载入目标模块pdb
.reload /f xxxx.dll ld xxxx 以kdcom为例子 .reload /f kdcom.dll ld kdcom 二选一
- 上传图片Security Error
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjIAAACXCAIAAACA4CZ6AAAgAElEQVR4nOy96Xcd13UnugFSUrJer/ ...
- delphi 获取本机IP地址和MAC地址
unit NetFunc; interface uses SysUtils, Windows, dialogs, winsock, Classes, ComObj, WinInet, Variants ...
- 深入浅出Docker(二):Docker命令行探秘
1. Docker命令行 Docker官方为了让用户快速了解Docker,提供了一个交互式教程,旨在帮助用户掌握Docker命令行的使用方法.但是由于Docker技术的快速发展,此交互式教程已经无法满 ...
- 微信小游戏 Egret开发数据域官方Demo下载地址
随着引擎的升级,伴随而来就是各种问题,使用官方调试过的Demo,少走弯路. Mark下 官方Demo
- Appium中长按按钮操作
在一次项目中,appium要对某个按钮进行长按操作(大于2s),类似拍微信小视频,参考网上长按视频会报错 action1 = TouchActions(self.driver) el = self.d ...
- maven学习(一)(转)
我记得在搞懂maven之前看了几次重复的maven的教学视频.不知道是自己悟性太低还是怎么滴,就是搞不清楚,现在弄清楚了,基本上入门了.写该篇博文,就是为了帮助那些和我一样对于maven迷迷糊糊的人. ...
- ibatis 中#和 $ 符号的区别
1.数据类型匹配 #:会进行预编译,而且进行类型匹配(自动确定数据类型): $:不进行数据类型匹配. 2.实现方式: # 用于变量替换(先生成一个占位符,然后替换) select * from use ...
- UESTC 485 Game(康托展开,bfs打表)
Game Time Limit: 4000/2000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Status t ...