2022牛客多校第一场A、C、D、G、I、J
A- Villages: Landlines
在一条横轴上给定nnn个点横坐标xsx_sxs和半径rsr_srs,可以在横轴上任意两点连线,问连接这nnn个点形成的圆的连线最小长度为多少。
等价于给了nnn个区间起点和终点,排序贪心即可。时间复杂度O(nlogn)O(nlogn)O(nlogn)
cin >> n;for (int i = 1; i <= n; i++){int a, b;cin >> a >> b;w[i] = {a - b, a + b};}sort(w + 1, w + 1 + n);int ans = 0;int now = w[1].y;for (int i = 2; i <= n; i++){if (w[i].x > now){ans += w[i].x - now;}now = max(now, w[i].y);}cout << ans << endl;
C- Grab the Seat!
好位置的定义:对于一个位置(xi,yi)(x_i,y_i)(xi,yi)满足与(0,1)(0,1)(0,1)和(0,m)(0,m)(0,m)的直线相交区间内没有人。
#include <bits/stdc++.h>
#define int long long
#define x first
#define y second
#define endl '\n'
using namespace std;
const int N = 200010, M = 2 * N, _ = 0, P = 13331;
typedef pair<int, int> pii;int k, t, q, n, m;
pii w[N];
int pos[N];//当前y x最小的位置
int ans[N];//合法位置数量void work()
{for (int i = 1; i <= m; i++)pos[i] = n + 1;for (int i = 1; i <= k; i++){auto [x, y] = w[i];pos[y] = min(pos[y], x);}int dx = 1, dy = 0;// y=(dy/dx)x+1 x=(y-1)*dx/dyfor (int i = 1; i <= m; i++){if (i == 1)ans[i] = pos[i] - 1;else{int x = pos[i], y = i;if ((y - 1) * dx >= x * dy)dx = x, dy = y - 1;ans[i] = ((i - 1) * dx + dy - 1) / dy - 1; //向上取整}}dx = 1, dy = m;// y=(dy/dx)x+m x=(y-m)*dx/dyfor (int i = m; i >= 1; i--){if (i == m)ans[i] = min(ans[i], pos[i] - 1);else{int x = pos[i], y = i;if ((y - m) * dx <= x * dy)dx = x, dy = y - m;ans[i] = min(ans[i], ((i - m) * dx + dy + 1) / dy - 1); //向上取整,dy是负数因此dy+1}}int res = 0;for (int i = 1; i <= m; i++)res += ans[i];cout << res << endl;
}void solve()
{cin >> n >> m >> k >> q;for (int i = 1; i <= k; i++){int a, b;cin >> a >> b;w[i] = {a, b};}while (q--){int a, b, c;cin >> a >> b >> c;w[a] = {b, c};work();}
}signed main()
{ios::sync_with_stdio(false), cin.tie(nullptr);int T;// cin >> T;T = 1;while (T--){solve();}return (0 ^ _ ^ 0);
}
D- Mocha and Railgun
double r, x, y, d;cin >> r >> x >> y >> d;double oa = sqrt(x * x + y * y);double oe = oa - d;double boe = acos(oe / r);double of = oa + d;double cof = acos(of / r);double jj = fabs(boe - cof);cout << fixed << setprecision(12) << jj * r << endl;
G- Lexicographical Maximum
求1∼n1\sim n1∼n中字典序最大的数。1≤n≤1010000001\le n\le 10^{1000000}1≤n≤101000000
cin >> str + 1;n = strlen(str + 1);int f=1;for(int i=1;i<n;i++)if(str[i]!='9'){f=0;break;}if(f)for(int i=1;i<=n;i++)cout<<str[i];else for(int i=1;i<n;i++)cout<<9;cout<<endl;
H- Fly
I- Chiitoitsu
给定131313张初始手牌,初始手牌不会出现超过两张相同的牌。问在最优策略下单人麻将自动摸切最终以七对子自摸胡牌的期望回合数是多少。
#include <bits/stdc++.h>
#define int long long
#define x first
#define y second
#define endl '\n'
using namespace std;
const int N = 1000010, M = 2 * N, _ = 0, P = 13331;
typedef pair<int, int> pii;int k, t, q, n, m;
int w[N];
char str[N];
int po[200];
int dp[200][200];
int cnt;
int ans[20];
int qmi(int a, int b, int p = mod)
{int res = 1;while (b){if (b & 1)res = (ll)res * a % p;a = (ll)a * a % p;b >>= 1;}return res;
}int dfs(int res, int now) // res剩下几种牌 now牌河
{if (~dp[res][now])return dp[res][now];if (res == 1){dp[res][now] = ((res * 3) * po[now] % mod +//不需要+1因为当前回合已经自摸了(now - res * 3) * po[now] % mod * (dfs(res, now - 1) + 1) % mod) %mod;return dp[res][now];}dp[res][now] = ((res * 3) * po[now] % mod * (dfs(res - 2, now - 1) + 1) % mod+ (now - res * 3) * po[now] % mod * (dfs(res, now - 1) + 1) % mod) % mod;//dfs()+1代表多一轮return dp[res][now];
}void work(int x)
{memset(dp, -1, sizeof dp);for (int i = 0; i < 200; i++)dp[i][0] = 0;ans[x] = dfs(x, 123);
}void solve()
{cin >> str + 1;n = strlen(str + 1);map<string, int> mp;for (int i = 2; i <= n; i += 2){string tmp = "";tmp += str[i - 1];tmp += str[i];mp[tmp]++;}cnt = 0;for (auto [a, b] : mp)if (b % 2)cnt++;cout << ans[cnt] << endl;
}signed main()
{ios::sync_with_stdio(false), cin.tie(nullptr);int T;for (int i = 1; i <= 150; i++)po[i] = qmi(i, mod - 2) % mod;cin >> T;// T=1;for (int i = 0; i <= 13; i++)work(i);for (int i = 1; i <= T; i++){cout << "Case #" << i << ": ";solve();}return (0 ^ _ ^ 0);
}
J- Serval and Essay
有一张nnn个点mmm 条边的无重边无自环的有向图,初始时可以选择一个点染黑,其余点均为白点。若某个点所有入边的起点均为黑点,则该点可以被染黑。求最大化图中黑点数量。
多组数据,∑n≤2∗105,∑m≤5∗105\sum n\le2*10^5,\sum m\le 5*10^5∑n≤2∗105,∑m≤5∗105
#include <bits/stdc++.h>
#define int long long
#define x first
#define y second
#define endl '\n'
using namespace std;
const int N = 1000010, M = 2 * N, _ = 0, P = 13331;int k, t, q, n, m;
int w[N];
set<int> out[N]; //集合的所有出边
int din[N], pre[N];
int id[N]; // i所属集合的编号
int qe[N], hh, tt;
int p[N], si[N];int find(int x)
{if (p[x] != x)p[x] = find(p[x]);return p[x];
}void init()
{for (int i = 1; i <= n; i++){out[i].clear();p[i] = i;si[i] = 1;}hh = 1, tt = 0;
}int merge(int u, int v)
{u = find(u), v = find(v);if (u == v)return id[u];int idu = id[u], idv = id[v];p[v] = u; //合并集合si[u] += si[v];if (out[idv].size() > out[idu].size()) //启发式合并swap(idu, idv);for (auto it : out[idv]) //更新集合v中能到达的所有点的入度{auto itu = out[idu].find(it);if (itu == out[idu].end())out[idu].insert(it);else{din[it]--;if (din[it] == 1){qe[++tt] = it;pre[it] = u;}}}return idu;
}void solve()
{cin >> n;init();for (int i = 1; i <= n; i++){cin >> din[i];for (int j = 1; j <= din[i]; j++){int a;cin >> a;pre[i] = a;out[a].insert(i);}if (din[i] == 1) //如果入度为1则加进合并队列,说明假设pre[i]成立,i也成立qe[++tt] = i;id[i] = i;}while (hh <= tt){int cur = qe[hh++];int pp = pre[cur];pp = find(pp);id[pp] = merge(pp, cur);}int ans = 0;for (int i = 1; i <= n; i++)ans = max(ans, si[i]);cout << ans << endl;
}signed main()
{ios::sync_with_stdio(false), cin.tie(nullptr);int T;cin >> T;// T=1;for (int i = 1; i <= T; i++){cout << "Case #" << i << ": ";solve();}return (0 ^ _ ^ 0);
}
2022牛客多校第一场A、C、D、G、I、J相关推荐
- 2019牛客多校第一场
2019牛客多校第一场 题号 题目 知识点 A Monotonic Matrix B Symmetric Matrix C Fluorescent 2 D Two Graphs E Removal F ...
- python字符串去重及排序 牛客_2018牛客多校第一场 D.Two Graphs
题意: n个点,m1条边的图E1,n个点,m2条边的图E2.求图E2有多少子图跟图E1同构. 题解: 用STL的全排列函数next_permutation()枚举映射.对于每一种映射枚举每一条边判断合 ...
- 2020 牛客多校第一场
2020 牛客多校第一场 A. B-Suffix Array 后缀数组的思想:倍增+桶排序的方式找出一串连续序列后缀的大小.虽说正常使用的时候都是字典序,但是只要修改排序方式,也能够达到一个类似的&q ...
- 【多校训练】2021牛客多校第一场
[前言] 组队训练的第一场比赛,感觉这场出题十分阴间,后面几个乱搞题根本不会.jpg 赛时只过了5题,rk123,学校参加5/8. A. Alice and Bob [题意] 两人博弈,每次一个人从一 ...
- 2018牛客多校第一场 Monotonic Matrix (LGV引理)
链接:https://www.nowcoder.com/acm/contest/139/A 来源:牛客网 题目描述 Count the number of n x m matrices A satis ...
- 2022牛客多校第二场CDE
C题 题意:nim游戏,先手赢的话,尽量赢的快,输的话尽量输的慢. 求最多的游戏局数,和先手执行的最优策略数 下面给两个结论: 1,石子数异或和为0的话,先手败,否则胜 2,先手败的话,可以构造出先后 ...
- [2020牛客多校第一场]Coda的题解集
被暴打了. 会先写比赛中过题数100+的题目,其他的以后再补. 施工中,未完待续- F Infinite String Comparision 一开始想到的是对比到lcm(|a|,|b|),意料之中T ...
- 2019年牛客多校第一场B题 Integration 定积分 裂项相消
题目链接: https://ac.nowcoder.com/acm/contest/881/B 题解: 转发一个大佬的博客,裂项相消,很容易看懂. https://blog.csdn.net/dill ...
- FFT ---- 2021牛客多校第一场 H Hash Function
题目链接 题目大意: 解题思路: 首先我们知道任意两个数%seed\%seed%seed都不相同→\rightarrow→(aj−ai)%seed≠0(∀ai≤aj)(a_j-a_i)\%seed\n ...
最新文章
- SpringMVC---web.xml的配置
- 为什么没有MMU的处理器无法安装操作系统?
- matlab碎纸拼接相似函数,基于蒙特卡洛算法构建能量函数的碎纸图片拼接方法
- YY/T 0664—2020《医疗器械软件 软件生存周期过程》 相关
- 从零做网站开发:基于Flask和JQuery,实现表格管理平台
- cordova指定版本_Cordova/Ionic构建android Gradle错误:支持的最小Gradle版本是2.14.1。当前版本是2.13...
- 携程正式挂牌港交所 开盘涨近5%
- Jquery学习总结(2)——jQuery Ajax用法详解
- Forms验证中的roles(转)
- 【会议】2009-1-6
- 性能测试负载模型(十)
- c语言实现开方,c语言开方(c语言开平方代码)
- 【swarm测试极简指南】如何获得bzz奖励?0.6.2版本手动安装指南
- SPSS-非参数检验
- 新站如何解决收录问题
- php fpm 测试,php-fpm – 配置详解(转)
- Win11如何重置电脑 Win11重置电脑教程
- 课程设计 天气预报数据可视化开发
- HBA卡,HCA卡,IB卡,以太网卡,万兆网卡
- [HNOI2004]宠物收养所(简单理解,用set写的)
热门文章
- VRay 2.0 for SketchUp高级室内渲染教程荟
- win10+Ubantu双系统
- 最新传智播客P2P金融项目网络借贷平台开发
- 学校行政会议管理系统
- excel去重函数的使用方法_EXCEL 怎么用函数公式计数(Excel函数去重计数 / 去除重复项),不使用透视表...
- 这游戏如此吊,它的玩家知道吗-Android游戏《头脑风暴》
- MPU6500寄存器映射及说明
- 计算机软件检验 考试题,历年计算机软件水平程序员部分考试真题
- 读王坚博士的《在线》有感
- mysql 商品规格表_完成后台管理系统功能(九)商品规格列表的展示,添加以及删除...