题解 CF1082A 【Vasya and Book】

史上最难A题,没有之一

从题意可以看出,翻到目标页只有三种办法

  • 先从\(x\)到\(1\),再从\(1\)到\(y\)

  • 先从\(x\)到\(n\),再从\(n\)到\(y\)

  • 直接从\(x\)到\(y\)

三种的必要条件分别是

  • \((y-1)\mod d \equiv 0\)

  • \((n-y)\mod d \equiv 0\)

  • \(|x-y|\mod d \equiv 0\)

所以如果上面三种都不满足的话就输出\(-1\)

不然就取最小的输出

# include <bits/stdc++.h>

int main()
{
int T;
scanf("%d", &T);
while(T--)
{
int n, x, y, d;
scanf("%d%d%d%d", &n, &x, &y, &d);
int ans = 0x7f7f7f7f;
if(abs(x - y) % d == 0)
ans = abs(x - y) / d;
if((y - 1) % d == 0)
ans = std::min(ans, (x - 1) / d + bool((x - 1) % d) + (y - 1) / d);
if ((n - y) % d == 0)
ans = std::min(ans, (n - x) / d + bool((n - x) % d) + (n - y) / d);
if(ans == 0x7f7f7f7f)
{
printf("-1\n");
continue;
}
printf("%d\n", ans);
}
return 0;
}

题解 CF1082B 【Vova and Trophies】

\(B\)比\(A\)水qwq

这题,对每一个''\(G\)'',求它这一块的左边界和右边界

然后对于每一个''\(S\)'',求一下他左边那块的大小,右边那块的大小,再判断一下他能不能把两块连在一起,不能就取大的那块,做完了

#include <bits/stdc++.h>

using std::string;

const int MaxN = 100010;

int a[MaxN];
int l[MaxN], r[MaxN]; int main()
{
int n;
string s;
scanf("%d", &n);
std::cin >> s;
int len = s.length();
int sum = 0, ans = 0;
for (int i = 0; i < len; i++)
a[i + 1] = s[i] == 'S' ? 0 : 1, sum += a[i + 1];
if (sum == 0)
return printf("0") * 0;
if (sum == n)
return printf("%d\n", n) * 0;
for (int i = 1; i <= n; i++)
{
if (a[i] == 1 && a[i - 1] == 1)
l[i] = l[i - 1];
else
l[i] = i;
}
for (int i = n; i >= 1; i--)
{
if (a[i] == 1 && a[i + 1] == 1)
r[i] = r[i + 1];
else
r[i] = i;
}
for (int i = 1; i <= n; i++)
{
if (a[i] == 0)
{
int tmp = 0;
if (a[i - 1])
tmp += r[i - 1] - l[i - 1] + 1;
if (a[i + 1])
tmp += r[i + 1] - l[i + 1] + 1;
if(tmp == sum)
ans = std::max(ans, tmp);
if (tmp < sum)
ans = std::max(ans, tmp + 1);
if (a[i - 1] && r[i - 1] - l[i - 1] + 1 < sum)
ans = std::max(r[i - 1] - l[i - 1] + 2, ans);
if (a[i + 1] && r[i + 1] - l[i + 1] + 1 < sum)
ans = std::max(r[i + 1] - l[i + 1] + 2, ans); }
}
printf("%d\n", ans);
return 0;
}

题解 CF1082C 【Multi-Subject Competition】

这个\(C\)好难啊

这是道前缀和好题

首先,读入后,把每一个分数扔进相应学科的桶

然后贪心地对每个桶排序

然后对于每一个桶,求前缀和,如果大于\(0\),就加到对应的\(ans[i]\)中(\(ans[i]\)记录的是每个学科\(i\)个人的最大得分)

最后输出

\[\max_{1<=i<=n}{ans[i]}
\]

#include <bits/stdc++.h>

# define int long long

using std::vector;
const int MaxN = 100010; int ans;
int sum[MaxN];
vector<int> v[MaxN];
int s[MaxN], rank[MaxN]; int cmp(int a, int b) { return a > b; } signed main()
{
int n, m, maxn = 0;
scanf("%I64d%I64d", &n, &m);
for (int i = 1; i <= n; i++)
{
scanf("%I64d%I64d", &s[i], &rank[i]);
v[s[i]].push_back(rank[i]);
maxn = std::max(rank[i], maxn);
}
if (maxn == 0)
return 0 * printf("0\n");
for (int i = 1; i <= m; i++)
{
if (v[i].size())
std::sort(v[i].begin(), v[i].end(), cmp);//排序
}
for(int i = 1; i <= m; i++)
{
int tmp = 0;
for(int j = 0; j < v[i].size(); j++)
{
tmp += v[i][j];
if(tmp <= 0)
break;
sum[j + 1] += tmp;//前缀和
}
}
printf("%d", *std::max_element(sum + 1, sum + n + 1));
return 0;
}

Educational Codeforces Round 55 题解的更多相关文章

  1. Educational Codeforces Round 55 (Rated for Div. 2) C. Multi-Subject Competition 【vector 预处理优化】

    传送门:http://codeforces.com/contest/1082/problem/C C. Multi-Subject Competition time limit per test 2 ...

  2. Educational Codeforces Round 55 (Rated for Div. 2):E. Increasing Frequency

    E. Increasing Frequency 题目链接:https://codeforces.com/contest/1082/problem/E 题意: 给出n个数以及一个c,现在可以对一个区间上 ...

  3. Educational Codeforces Round 55 (Rated for Div. 2):D. Maximum Diameter Graph

    D. Maximum Diameter Graph 题目链接:https://codeforces.com/contest/1082/problem/D 题意: 给出n个点的最大入度数,要求添加边构成 ...

  4. Educational Codeforces Round 55 (Rated for Div. 2):C. Multi-Subject Competition

    C. Multi-Subject Competition 题目链接:https://codeforces.com/contest/1082/problem/C 题意: 给出n个信息,每个信息包含专业编 ...

  5. Educational Codeforces Round 55 (Rated for Div. 2) B. Vova and Trophies

    传送门 https://www.cnblogs.com/violet-acmer/p/10035971.html 题意: Vova有n个奖杯,这n个奖杯全部是金奖或银奖,Vova将所有奖杯排成一排,你 ...

  6. Educational Codeforces Round 55 (Rated for Div. 2) A - Vasya and Book

    传送门 https://www.cnblogs.com/violet-acmer/p/10035971.html 题意: 一本书有n页,每次只能翻 d 页,问从x页到y页需要翻动几次? 注意:往前翻最 ...

  7. Educational Codeforces Round 19 题解【ABCDE】

    A. k-Factorization 题意:给你一个n,问你这个数能否分割成k个大于1的数的乘积. 题解:因为n的取值范围很小,所以感觉dfs应该不会有很多种可能-- #include<bits ...

  8. Educational Codeforces Round 55 (Rated for Div. 2) A/B/C/D

    http://codeforces.com/contest/1082/problem/A WA数发,因为默认为x<y = = 分情况讨论,直达 or x->1->y  or  x-& ...

  9. [Educational Codeforces Round 55 (Rated for Div. 2)][C. Multi-Subject Competition]

    https://codeforc.es/contest/1082/problem/C 题目大意:有m个类型,n个人,每个人有一个所属类型k和一个能力v,要求所选的类型的人个数相等并且使v总和最大(n, ...

随机推荐

  1. 如何利用 iTunes 把 m4a/wav 文件转成 MP3 格式

    MAC技巧 | 如何利用 iTunes 把 m4a/wav 文件转成 MP3 格式 - 简书

  2. Linux权限管理:ACL 权限

    1.ACL 是什么 ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表.它在UGO权限管理的基础上为文件系统提供一个额外的.更灵活的权限管理机 ...

  3. Golang高并发抓取HTML图片

    Golang高并发抓取HTML图片 使用准备 1.安装Golang 2.下载爬虫包 go get -v github.com/hunterhug/marmot/util go get -v githu ...

  4. hdu 6143第二类striling

    题意:有m种字符,要求构造两段长度为n的字符串,其中这两段不能有相同的字符 枚举左边选了i种字符,右边可以选1,2....min(n,m-i)种字符 这样就把问题转化为用k种字符构造n长度的字符串的种 ...

  5. UI5-技术篇-jQuery.ajax执行过程中Token验证及JSON格式传值问题

    最近两天在测试OData服务类方法CREATE_DEEP_ENTITY及GET_EXPANDED_ENTITYSET,刚开始采用ODataModel方式调用没有任何问题,但是ODataModel采用的 ...

  6. Java调用Python相关问题:指定python环境、传入参数、返回结果

    本篇文章涉及到的操作均在Windows系统下进行,Java调用python在原理上不难,但是可能在实际应用中会有各种各样的需求,网上其他的资料很不全,所以又总结了这篇文章,以供参考. 一.指定pyth ...

  7. Windows——Thinkpad 开机显示pwmtr64v.dll找不到指定的模块

    解决方法:进入设备管理器,展开系统设备分页,找到Lenovo Power Manager ,右键,更新驱动程序,浏览计算机上的驱动程序, 让我从计算机上的可用驱动程序列表中选取,选择Lenovo Po ...

  8. webpack中bundler源码编写

    新建一个项目,再新建一个src文件夹,里面有三个文件,word.js,message.js,index.js word.js export const word = 'hello'; message. ...

  9. 解密Redis持久化【翻译】

    本文来自Redis的作者,他在论坛看到大家对Redis持久化误解较大,所以写此文章论述持久化 写操作的流程 首先我们来看一下数据库在进行写操作时到底做了哪些事,主要有下面五个过程. 客户端向服务端发送 ...

  10. 利用random模块做一个抢红包功能

    我们都知道random模块是一个生成随机数的模块,用它来做抢红包的功能很合适. 抢红包,抢到的金额是随机的,但怎么让每个人抢到的随机金额公平合理呢 比如:我想发一个100元的红包让10个人抢,我可以把 ...