A.Villages: Landlines

区间问题的板子

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
#define ll long long
#define pll pair<ll, ll>
vector<pll> v;int main()
{ll n;cin >> n;ll xs, rs;cin >> xs >> rs;for (ll i = 1; i < n; ++i){ll X, R;cin >> X >> R;v.push_back({X - R, R + X});}v.push_back({xs - rs, xs + rs});sort(v.begin(), v.end());ll ans = 0;ll L = v[0].first, r = v[0].second;for (int i = 1; i < n; ++i){if (v[i].first > r){ans += v[i].first - r;L = v[i].first;r = v[i].second;}else{r = max(v[i].second, r);}}cout << ans;return 0;
}
板子
acwing上有详细的问题及解答sort(p, p + m, cmp);int ans = 0;int L = p[0].first, r = p[0].second;for (int i = 1; i < m; ++i) {if (p[i].first > r) {ans += r - L + 1;L = p[i].first;r = p[i].second;} else {r = max(p[i].second, r);}}ans += r - L + 1;     cout << l + 1 - ans<< endl;

G. Lexicographical Maximum

#include <cstdio>
#include<iostream>
using namespace std;
int main()
{char c;bool flag = false, mark = false;unsigned long long cnt = 0, num = 1;char pre;scanf("%c", &c);pre = c;if (c != '9')mark = true;else++cnt;while (scanf("%c", &c)){if(! (c >= '0' && c <= '9')) break;printf("9");flag = true;if (c != '9')mark = true;else++cnt;++num;pre = c;}if (!flag || (cnt == num - 1 && pre != '9')){printf("%c", pre);}else if (flag && !mark)printf("9");return 0;
}

D. Mocha and Railgun

几个结论:

  • 弦长和弧长无直接关系
  • 求∝:反三角函数(atan精确度最高)
  • sin(∝/2) = L / 2*R
  • 弧长:∝ * Π * R / 180 或者求弧长积分或者 ∝ * r
  • 弦长相同时,半径越长,弧长越短;反之亦然。 弧长相同时,半径越长,弦长越长;反之亦然
  • 旋转的线段所在的直线过圆心时,圆弧上的曲率(角度)最大;相同长度上的圆弧,曲率越大,圆弧越
    方法一:
    由于公式 ∝ * r,可得角度越大弧长越大;
    使角度最大的方法就是让AB的延长线过原点
    当结论记吧
int main(){int t;cin >> t;while(t--){double r, x, y, d;cin >> r >> x >> y >> d;double D = sqrt(x * x + y * y);//到原点的距离double a = acos((D - d) / r) - acos((D + d) / r);//角度3-角度1double res = a * r;printf("%.12f\n", res);}return 0;
}

方法二:
求导,不会

I.Chiitoitsu

期望dp
本题需要取模,而期望值并不一定是整数,所以要用到逆元(分数)和快速幂

来源 oi-wiki

总结:

  • 一般多组数据的dp,极有可能就是提前打表
  • 当需要对分数取模时,用逆元快速幂

参考
1.
2.
3.

ll fast_power(ll a, ll b)
{ll pr = 1;while (b > 0){if (b & 1)pr = pr * a % p;a = a * a % p;b >>= 1;}return pr;
}
ll dp[15][140];
ll f[140][15];
void init()
{//需要预处理 利用最基本的方法// for(int i = 3;i <= 123;i ++){//     dp[1][i] = (1 + (((i - 3) * fast_power(i,p - 2) % p) * dp[1][i-1] % p)) % p;// }// for(ll i = 3;i <= 13;i += 2){//     for(ll j = 3;j <= 123;j ++){//         dp[i][j] = (1 + (((i * 3) * fast_power(j,p - 2) % p) * dp[i - 2][j - 1] % p) + (((j - i * 3) * fast_power(j,p - 2) % p) * dp[i][j - 1] % p)) % p;//     }// }//不需要预处理 利用2*j-1for (int i = 3; i <= 123; i++){                                  int inv = fast_power(i, p - 2); for (int j = 1; j <= 7 && 3 * (2 * j - 1) <= i; j++){f[i][j] = 3ll * (2 * j - 1) * inv % p * (f[i - 1][j - 1] + 1) % p;f[i][j] = (f[i][j] + 1ll * (i - 3 * (2 * j - 1)) * inv % p * (f[i - 1][j] + 1) % p) % p;}}
}
map<string, int> mp;
int main(){init();int t;cin >> t;for (int q = 1; q <= t; ++q){mp.clear();string s;cin >> s;// int num = 0;// for(int i = 0; i < 26; i += 2){//     string temp = "";//     temp += s[i];//     temp += s[i + 1];//     ++mp[temp];// }// for(int i = 0; i < 26; i += 2){//     string temp = "";//     temp += s[i];//     temp += s[i + 1];//     if(mp[temp] == 1)//         ++num;// }int num = 7;for (int i = 0; i < 26; i += 2){string temp = "";//int可能会冲突temp += s[i];temp += s[i + 1];++mp[temp];if (mp[temp] == 2)--num;}printf("Case #%d: %lld\n", q, f[123][num]); // dp[num][123]}return 0;
}

最短路 + 期望dp: P1850 [NOIP2016 提高组] 换教室

int c[2010], d[2010];
double k[2010];
int g[310][310];
double dp[2010][2010][2];
int main() {IOS;int n, m, v, e;cin >> n >> m >> v >> e;//时间段数量 最多申请 教室数量 道路数量for (int i = 1; i <= n; ++i){cin >> c[i];//被安排上课的的教室}for (int i = 1; i <= n; ++i){cin >> d[i];//另一间上同样课程的教室(同样时间)}for (int i = 1; i <= n; ++i){cin >> k[i];//换第i个教室的概率}remax(g);for (int i = 0; i < e; ++i){int a, b,c;cin >> a >> b >> c;c = min(g[a][b], c);g[a][b] = g[b][a] = c;}for (int k = 1; k <= 300; ++k){for (int i = 1; i <= 300; ++i){for(int j = 1; j <= i; ++j){if(g[i][k] + g[k][j] < g[i][j])g[i][j] = g[j][i] = g[i][k] + g[k][j];}}g[k][k] = 0;}for (int i = 0; i <= n; i++)for (int j = 0; j <= m; j++){dp[i][j][0] = dp[i][j][1] = 0x3f3f3f3f;}dp[1][0][0] = dp[1][1][1] = 0;for (int i = 2; i <= n; ++i){dp[i][0][0] = dp[i - 1][0][0] + g[c[i - 1]][c[i]];for (int j = 1; j <= min(n, m); ++j){double temp = dp[i - 1][j][1] + g[c[i - 1]][c[i]] * (1 - k[i - 1]) + g[d[i - 1]][c[i]] * k[i - 1];dp[i][j][0] = min(dp[i][j][0], min(dp[i - 1][j][0] + g[c[i - 1]][c[i]], temp));temp = dp[i - 1][j - 1][1] + g[c[i - 1]][c[i]] * (1 - k[i - 1]) * (1 - k[i]) + g[c[i - 1]][d[i]] * (1 - k[i - 1]) * k[i] + g[d[i - 1]][c[i]] * k[i - 1] * (1 - k[i]) + g[d[i - 1]][d[i]] * k[i - 1] * k[i];dp[i][j][1] = min(dp[i][j][1], min(dp[i - 1][j - 1][0] + g[c[i - 1]][c[i]] * (1 - k[i]) + g[c[i - 1]][d[i]] * k[i], temp));}}double ans = 0x3f3f3f3f;for (int i = 0; i <= m; ++i){ans = min(ans, min(dp[n][i][0], dp[n][i][1]));}printf("%.2f", ans);return 0;
}

经验:不能直接remax(dp),会出现非常小的数导致出错,应该双重for赋0x3f3f3f3f

2022暑假牛客多校1 (A/G/D/I)相关推荐

  1. 【2020暑假牛客多校(一)】

    牛客多校 Home AC:2,rank517AC : 2, rank517AC:2,rank517 7.127.127.12 题单 F(1271/5027)F(1271/5027)F(1271/502 ...

  2. 2019暑假牛客多校赛第九场H.Cutting Bamboos (主席树+二分)

    题意: 有n条柱子,高度为aia_iai​ ,我们有qqq次操作.在l到r的范围内砍yyy次,将所有的树高都砍为0,但是保证每一刀砍出来的长度(砍除树高于该高度的和)都是相同的.问你第xxx次砍的时候 ...

  3. 2022 年牛客多校第四场补题记录

    A Task Computing 题意:给定长度为 nnn 的序列 {(wi,pi)}\{(w_i,p_i)\}{(wi​,pi​)},从中选出 mmm 项并重新排列得到子序列 {a1,a2,⋯,am ...

  4. 2022年牛客多校第三场补题记录

    A Ancestor 题意:给出两棵 nnn 个节点的树 A,BA,BA,B,A,BA,BA,B 树上每个节点均有一个权值,给出 kkk 个关键点的编号 x1,x2,⋯,xkx_1, x_2, \cd ...

  5. 牛客多校第二场 G transform

    链接:https://www.nowcoder.com/acm/contest/140/G White Cloud placed n containers in sequence on a axes. ...

  6. 2022牛客多校(十)

    2022牛客多校(十) 一.比赛小结 比赛链接:"蔚来杯"2022牛客暑期多校训练营10 二.题目分析及解法(基础题) F.Shannon Switching Game? 题目链接 ...

  7. 牛客多校三 B Black and white

    牛客多校三 B Black and white 在n*m的棋盘上,每个格子有一个数,初始可以选一定的格子标记为黑色,在任意四个形如(i1, j1)(i1, j2)(i2, j1)(i2, j2)的格子 ...

  8. 2019牛客多校第一场

    2019牛客多校第一场 题号 题目 知识点 A Monotonic Matrix B Symmetric Matrix C Fluorescent 2 D Two Graphs E Removal F ...

  9. LCS(2021牛客多校4)

    LCS(2021牛客多校4) 题意: 让你构造三个字符串s1,s2,s3,长度均为n,要求LCS(s1,s2)=a,LCS(s2,s3)=b,LCS(s1,s3)=c 题解: 先考虑三个串互相LCS为 ...

最新文章

  1. gcc 使用 stdio.h
  2. [转] 鼠标移入/移出颜色渐变
  3. JSP中response,session,cookie,application的作用及区别
  4. 【数据结构与算法】之深入解析“组合总和III”的求解思路与算法示例
  5. cf1561C. Deep Down Below
  6. rstudio 修改代码间距_第一章 R和RStudio
  7. 从面试官问“为什么选择mysql数据库”说开去
  8. HDU2161 Primes
  9. 使用SQL语句添加和删除约束
  10. OSPFv3报文中Option字段变化简介
  11. 第1章第14节:导出:如何将演示文稿保存为视频格式的文件 [PowerPoint精美幻灯片实战教程]
  12. 天载免息股票汽车整车涨幅居前
  13. 在Mac电脑中配置ios模拟器
  14. detecting current sdk tools version
  15. inv在C语言是什么函数,机械原理中的inv  函数是什么意思?
  16. html表格不能横向自动展示,layui数据表格table横向滚动条不显示纵向滚动条显示不完整...
  17. ThreadAbortException问题
  18. c语言程序设计指针何钦铭ppt,C语言程序设计 教学课件 作者 何钦铭 c2.ppt
  19. 数据库系统原理实验一:关系数据库标准语言SQL
  20. 屏幕的背光是什么呢?

热门文章

  1. 剑网3 云服务器,《剑网3》官网——次世代国风MMORPG
  2. 如何做一个小程序商城,需要多少钱
  3. 我所首席执行主任律师王杰接受《电脑报》记者采访就sp发展发表观点
  4. 基于实时计算(flink)打造舆情分析平台——新华智云...
  5. tkinter教程4:控件LabelFrame和Entry
  6. 2022华东杯A题核酸检测问题思路讲解
  7. 驱动你做一件事的动力来源是什么?
  8. 耶格肺功能仪软件 - 弥散测试
  9. 轩小陌的Python笔记-day05 数据类型
  10. R语言中K-Means聚类算法