Educational Codeforces Round 55 题解
题解 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\)个人的最大得分)
最后输出
\]
#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 题解的更多相关文章
- 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 ...
 - Educational Codeforces Round 55 (Rated for Div. 2):E. Increasing Frequency
		
E. Increasing Frequency 题目链接:https://codeforces.com/contest/1082/problem/E 题意: 给出n个数以及一个c,现在可以对一个区间上 ...
 - Educational Codeforces Round 55 (Rated for Div. 2):D. Maximum Diameter Graph
		
D. Maximum Diameter Graph 题目链接:https://codeforces.com/contest/1082/problem/D 题意: 给出n个点的最大入度数,要求添加边构成 ...
 - Educational Codeforces Round 55 (Rated for Div. 2):C. Multi-Subject Competition
		
C. Multi-Subject Competition 题目链接:https://codeforces.com/contest/1082/problem/C 题意: 给出n个信息,每个信息包含专业编 ...
 - 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将所有奖杯排成一排,你 ...
 - 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页需要翻动几次? 注意:往前翻最 ...
 - Educational Codeforces Round 19 题解【ABCDE】
		
A. k-Factorization 题意:给你一个n,问你这个数能否分割成k个大于1的数的乘积. 题解:因为n的取值范围很小,所以感觉dfs应该不会有很多种可能-- #include<bits ...
 - 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-& ...
 - [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, ...
 
随机推荐
- SQL高级教程
			
一.top子句 top子句用于规定要返回的记录的数目 并非所有数据库系统都支持top子句 # sqlserver SELECT TOP number|percent column_name(s) FR ...
 - rabbitMQ 重试
			
rabbitMQ 重试机制 spring.rabbitmq.listener.simple.retry.max-attempts=5 最大重试次数spring.rabbitmq.listener.si ...
 - Map、FlatMap 和 Reduce
			
Map 作用是生成一个新数组,遍历原数组,将每个元素拿出来做一些变换然后 append 到新的数组中. [1, 2, 3].map((v) => v + 1) // -> [2, 3, 4 ...
 - K380键盘IOS使用
 - shell 学习笔记2-shell-test
			
一.字符串测试表达式 前面一篇介绍:什么是shell,shell变量请参考: shell 学习笔记1-什么是shell,shell变量 1.字符串测试表达式参数 字符串需要用""引 ...
 - 在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据)
			
原文:在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决 ...
 - threejs  CameraHelper  查看照相机的观察范围
			
简单例子 这个例子,是在一个视图中,看到照相机的辅助线,也就是,一个照相机的观察访问 这样,就需要两个照相机,一个是主照相机,一个是加有辅助线的照相机(有两种,正交和透视,这里辅助的使用的是正交的) ...
 - 在我的电脑中删除wps云文档图标
			
在我的电脑中删除wps云文档图标 右键点击win10左下角选择运行,输入regedit打开注册表后,找到以下注册表路径: HKEY_CURRENT_USER\Software\Microsoft\Wi ...
 - 【已解决】bootstrap table 参数后台获取不到
			
查看请求,可以看到有部分字段是可以的. 改成以下这种即可,原因是由于字段为null,没把错误抛出来,为null的字段就不会放到请求的参数中.
 - flask之蓝图BulePrint使用
			
之前flask启用程序代码和逻辑代码都是在一个页面,这样代码多了很自然不利于关于,如果要将逻辑代码和进行分离,这里需要用到Falsk的蓝图(Blueprint) 项目结构 app文件夹为项目最外层文件 ...