2023.10.27牛客
2023.10.27 牛客解题报告
T1#
打一个
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-27 19:04:33
* @LastEditTime: 2023-10-27 19:11:14
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\T1.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include <bits/stdc++.h>
#define int long long
#define P 998244353
#define N 1001000
using namespace std;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * f;
}
int n, f[N];
inline int F(int x)
{
if(f[x]) return f[x];
return f[x] = (2 * F(x - 1) - F(x - 2)) % P;
}
signed main()
{
n = read();
// f[0] = 1, f[1] = 2;
// for(int i = 1; i <= n; i ++)
// cout << " I : " << F(i) << endl;
// for(int i = 1; i <= n; i ++)
// cout << "SDA: " << f[i] / f[i - 1] << endl;
cout << n + 1 << endl;
return 0;
}
T2#
设
答案即为
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-27 19:20:09
* @LastEditTime: 2023-10-27 19:21:30
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\T2.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include <bits/stdc++.h>
#define int long long
#define N 1000100
using namespace std;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * f;
}
int n, m, k;
struct node{int id, v;}e[N];
inline int cmp(node a, node b){return a.v > b.v;}
signed main()
{
n = read(), m = read(), k = read();
for(int i = 1; i <= n; i ++) e[read()].v ++;
for(int i = 1; i <= m; i ++) e[i].id = i;
sort(e + 1, e + m + 1, cmp);
cout << min(e[1].v, n - k) << endl;
return 0;
}
T3#
直接枚举每一个答案人数
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-27 19:43:36
* @LastEditTime: 2023-10-27 20:05:14
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\T3_T4.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include <bits/stdc++.h>
#define int long long
#define N 1000100
using namespace std;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * f;
}
int n, m, k, ans[N];
struct node{int id, v;}e[N];
inline int cmp(node a, node b){return a.v > b.v;}
signed main()
{
n = read(), m = read(), k = read();
for(int i = 1; i <= n; i ++) e[read()].v ++;
for(int i = 1; i <= m; i ++) e[i].id = i;
sort(e + 1, e + m + 1, cmp);
e[m + 1].v = -1e9;
for(int i = 1; i <= m; i ++)
{
int t = 0, kk = 0;
if(n - e[i].v < k){ans[e[i].id] = -1; continue;}
for(int j = e[1].v; j >= 0; j --)
{
if(j == 0) {ans[e[i].id] = 0; break;}
while(e[t + 1].v >= j) t ++;
if(e[i].v >= j) kk --;
kk += t;
if(kk > k){ans[e[i].id] = j; break;}
}
}
for(int i = 1; i <= m; i ++)
cout << ans[i] << " ";
return 0;
}
T4#
数据加强版T3
考虑维护两个前缀和,
接下来二分我们的答案人数。
考虑如何计算这个走的人数,设当前二分到的人数为
如果要是
其中中括号表示如果中括号里的成立则值为
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-27 21:13:38
* @LastEditTime: 2023-10-27 22:11:58
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\T4std.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include <bits/stdc++.h>
#define int long long
#define N 1000100
using namespace std;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * f;
}
int n, m, k, a[N], sum1[N], sum2[N];
inline int check(int x, int i){return (sum2[x] - (a[i] >= x) * a[i]) - (sum1[x] - (a[i] >= x)) * x;}
signed main()
{
n = read(), m = read(), k = read();
for(int i = 1; i <= n; i ++) a[read()] ++;
for(int i = 1; i <= m; i ++) sum1[a[i]] ++, sum2[a[i]] += a[i];
for(int i = n - 1; i >= 0; i --) sum1[i] += sum1[i + 1], sum2[i] += sum2[i + 1];
for(int i = 1; i <= m; i ++)
{
if(n - a[i] < k){cout << "-1 "; continue;}
int l = 0, r = n;
while(l < r)
{
int mid = l + r >> 1;
if(check(mid, i) <= k) r = mid;
else l = mid + 1;
}
cout << l << " ";
}
cout << endl;
for(int i = 0; i <= n; i ++)
cout << sum1[i] << " ";
return 0;
}
作者: 北烛青澜
出处:https://www.cnblogs.com/Multitree/articles/17793277.html
本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话