由于一次比赛被虐得太惨,,生发开始写blog的想法,于是便有了这篇随笔(找了个近期的cf比赛练练手(bushi))第一次写blog,多多包涵。

第二场cf比赛,第一场打的Div2,被虐太惨,所以第二场挑了个Div4...

比赛链接: https://codeforces.com/contest/1669

A. Division

  

翻译(参考):

  t组样例,每组样例给出一个正整数,判断该整数所在的范围

题解:

  签到题,分类讨论下即可

B.Trip

翻译(参考):

  t组样例,每组给出一个长度为n的数组,对每组样例输出一个在该数组中出现三次及三次以上的数字(可能有多个,输出任意一个就好),若不存在则输出-1.

题解:

  签到题,An<=2e5,值域范围不大,开个数组记录即可(值域过大可以考虑用map记录)。

C. Odd/Even Increments

翻译(参考)

  t组样例,对每组样例给出一个长度为n的数组(下标从1开始),有以下两种操作,每种操作可进行任意次

    1. 对所有奇数下标的元素+1

    2. 对所有偶数下标的元素+1

  问是否能进行以上两种操作使得数组所有元素都为奇数或都为偶数

题解:

  思维题,很容易想到如果原数组奇数和偶数分别对应的下标不满足均为奇数或者均为偶数不可能经过操作满足条件

  故而,分别判断奇数下标是否全为奇或全为偶,偶数下标是否全为奇或全为偶即可。

D. Colorful Stamp

翻译(参考):

  t组样例,每组给出一个仅由W R B组成的字符串。问该字符串能否经过操作(选择相邻的两个字符,一个变为R另一个变为B)由全为W的等长字符串得到,若可以输出YES,否则输出NO

题解:

样例解释:

  (BRB)

    WWW→WRB→BRB(YES)

  (RRR)

    不可能由WWW得到(NO)

  思维题,我们很容易想到每次操作的结果都是一个R一个B,,操作变换有以下四种情况(对W不能进行操作,因为W改变了不可能再变回去)

    1. RR ---> RB / BR(减少一个R)

    2. BB ---> RB / WR(减少一个W)

    3. RB ---> BR

    4. BR ---> RB

可以得出结论,只要字串中既含B又含有R就可以得到目标字串

把W看成空格得到一堆字串,判断这些字串中是否全为B或者全为B即可

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
string s;
void solve()
{
    int n, r = 0, b = 0, cnt = 0; // r记录R的个数,b记录B的个数
    cin >> n;
    getline(cin, s); //消除换行符
    getline(cin, s); //读入目标字符串
    for (int i = 0; i < n; i++)
    {
        if (s[i] == 'R')
        {
            cnt++;
            r++;
        }
        else if (s[i] == 'B')
        {
            cnt++;
            b++;
        }
        else //遇到W标志已得到一个子串进行判断该字串是否满足条件
        {
            if (r == 0 || b == 0)
            {
                cout << "NO\n";
                return;
            }
            cnt = 0, r = 0, b = 0;
        }
    }
    if (r == 0 || b == 0) //最后的一个不以W分隔的子串
    {
        cout << "NO\n";
        return;
    }
    cout << "YES\n";
}
signed main()
{
    ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
    int __;
    cin >> __;
    getline(cin, s);
    while (__--)
    {
        solve();
    }
}
E.2-Letter Strings

翻译(参考):

  t组样例,对每组样例给出n个长度为2的仅由abcdefghijk构成的字符串,求有几对字符串满足只有一个对应位置相同。

题解:

样例解释:

7
aa
bb
cc
ac
ca
bb
aa
("aa", "ac"), ("aa", "ca"), ("cc", "ac"), ("cc", "ca"), ("ac", "aa") and ("ca", "aa")
共计6种

  可以由容斥原理想到,先分别统计对每种字符在多少个字符串的第一个位置出现和对每种字符在多少个字符串的第二个位置出现的数量减去2*相同的字符串的个数(因为相同的字符串在第一个字符相同和第二个字符相同都有被统计)。利用组合数求出对应的每种情况的个数C2m

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
string s;
void solve()
{
    ll ans = 0;
    map<char, ll> mp1, mp2; // mp1统计在位置一(s[0])相同的字符串个数,mp2统计在位置二(s[1])相同的字符串个数
    map<string, ll> mp;     //统计相同的字符串个数
    int n;
    cin >> n;
    getline(cin, s); //吸收换行符
    for (int i = 0; i < n; i++)
    {
        string ss;
        getline(cin, ss);
        if (mp.find(ss) != mp.end())
        {
            mp[ss]++;
        }
        else
        {
            mp[ss] = 1;
        }
        if (mp1.find(ss[0]) != mp1.end())
        {
            mp1[ss[0]]++;
        }
        else
        {
            mp1[ss[0]] = 1;
        }
        if (mp2.find(ss[1]) != mp2.end())
        {
            mp2[ss[1]]++;
        }
        else
        {
            mp2[ss[1]] = 1;
        }
    }
    for (auto it : mp1) //统计每种字符在位置一相同的字符串的贡献
    {
        if (it.second != 1)
        {
            int t = it.second;
            ans += (t * (t - 1) / 2);
        }
    }
    for (auto it : mp2) //统计每种字符在位置二相同的字符串的贡献
    {
        if (it.second != 1)
        {
            int t = it.second;
            ans += (t * (t - 1) / 2);
        }
    }
    for (auto it : mp) //统计每种相同字符串的贡献
    {
        if (it.second > 1)
        {
            int t = it.second;
            string te = it.first;
            ans -= 2 * (t * (t - 1) / 2);
        }
    }
    cout << ans << "\n";
}
signed main()
{
    ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
    int __;
    cin >> __;
    getline(cin, s);
    while (__--)
    {
        solve();
    }
}
F. Eating Candies

翻译(参考):

  t组样例,对每组样例给出n个数分别为糖果的价值,Alice从左开始吃糖果,Bob从右往左开始吃糖果,每次只能有一个人吃到糖果,问是否能有一种方案使得两人在中途吃到的糖果总数量相同,输出最大糖果数量

题解:

样例解释:

9

7 3 20 5 15 1 11 8 10

Alice :  [7,3,20]

Bob :  [10,8,11,1]

两人吃的总价值均为30

可以吃的最多的糖果数量为7个

  笔者认为此题考查了前缀和,后缀和,二分。前缀和维护Alice吃的糖果总价值,后缀和维护Bob吃的糖果的总价值,二分查找前缀和对应的元素在后缀和数组中的位置,若出现可更新结果(Alice和Bob的总价值相同),对结果取max输出即可

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
ll w[200009], a[200009], b[200009]; //记得开long long,因为前缀和或后缀和可能很大会爆int
void solve()
{
    int n, ans = 0;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> w[i];
        a[i] = a[i - 1] + w[i]; //前缀和->Alice的总价值
    }
    b[n + 1] = 0;
    for (int i = n; i >= 1; i--)
    {
        b[i] = b[i + 1] + w[i]; //后缀和->Bob的总价值
    }
    for (int r = n; r > 1; r--)
    {
        int p = lower_bound(a + 1, a + 1 + r - 1, b[r]) - a; //二分查找
        if (p != r && a[p] == b[r])                          //找到的位置值相同,更新答案
        {
            ans = max(ans, p + n - r + 1); // Alice:p个  Bob:n-r+1个
        }
    }
    cout << ans << "\n";
}
signed main()
{
    ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
    int __;
    cin >> __;
    while (__--)
    {
        solve();
    }
}
G. Fall Down

翻译(参考):

t组样例,对每组样例给出n*m的地图,‘*’代表石头,‘.’代表空地,‘o’代表障碍,对每个石头可以进行下落直到遇到障碍或到达底部,输出最终的地图。

样例:

6 10
.*.*....*.
.*.......*
...o....o.
.*.*....*.
..........
.o......o*

输出:

..........
...*....*.
.*.o....o.
.*........
.*......**
.o.*....o*

题解:

  对每个*(石头)往下找第一个不为.(空地)的位置或已到达底部,将二者进行交换即可

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
void solve()
{
    int n, m;
    cin >> n >> m;
    char s[60][60];
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cin >> s[i][j]; //读入
        }
    }
    for (int i = n - 2; i >= 0; i--)
    {
        for (int j = 0; j < m; j++)
        {
            if (s[i][j] == '*') //石头
            {
                int k = i + 1;
                while (k < n && s[k][j] == '.') //找第一个不为空地的位置或已到达底部
                {
                    k++;
                }
                swap(s[i][j], s[k - 1][j]); //交换
            }
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cout << s[i][j];
        }
        cout << "\n";
    }
    cout << "\n";
}
signed main()
{
    ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
    int __;
    cin >> __;
    while (__--)
    {
        solve();
    }
}
H. Maximal AND
 
咳咳,鄙人不才,此题赛时没写出来,赛后也没去补题.....
 
ending:
第一次写blog,有什么错误之处欢迎指正!鄙人不胜感激!

[cf]Codeforces Round #784(Div 4)的更多相关文章

  1. CF Codeforces Round #231 (Div. 2)

    http://codeforces.com/contest/394 话说这次CF做的超级不爽,A题一开始交过了,我就没再管,B题还没看完呢,就死困死困的,后来觉得B题枚举一下估计能行,当时是觉得可以从 ...

  2. CF Codeforces Round #258 (Div. 2) B (451B)

    题意:找出一段逆序! 预存a[]数组到b[]数组.将b排序,然后前后找不同找到区间[l,r],然后推断[l,r]是否逆序就能够了!.当然还得特判本身就是顺序的!! ! AC代码例如以下: #inclu ...

  3. CF Codeforces Round #256 (Div. 2) D (448D) Multiplication Table

    二分!!! AC代码例如以下: #include<iostream> #include<cstring> #include<cstdio> #define ll l ...

  4. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  5. 【cf比赛记录】Codeforces Round #601 (Div. 2)

    Codeforces Round #601 (Div. 2) ---- 比赛传送门 周二晚因为身体不适鸽了,补题补题 A // http://codeforces.com/contest/1255/p ...

  6. 【cf比赛记录】Codeforces Round #600 (Div. 2)

    Codeforces Round #600 (Div. 2) ---- 比赛传送门 昨晚成绩还好,AC A,B题,还能上分(到底有多菜) 补了C.D题,因为昨晚对C.D题已经有想法了,所以补起题来也快 ...

  7. Codeforces Round #378 (Div. 2) D题(data structure)解题报告

    题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...

  8. Codeforces Round #253 (Div. 1) (A, B, C)

    Codeforces Round #253 (Div. 1) 题目链接 A:给定一些牌,然后如今要提示一些牌的信息,要求提示最少,使得全部牌能够被分辨出来. 思路:一共2^10种情况,直接暴力枚举,然 ...

  9. CF922 CodeForces Round #461(Div.2)

    CF922 CodeForces Round #461(Div.2) 这场比赛很晚呀 果断滚去睡了 现在来做一下 A CF922 A 翻译: 一开始有一个初始版本的玩具 每次有两种操作: 放一个初始版 ...

随机推荐

  1. 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

    使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的.例如,对于如下语句: final StringBuilder a=new StringBuilder ...

  2. elasticsearch 了解多少,说说你们公司 es 的集群架构,索 引数据大小,分片有多少,以及一些调优手段 ?

    面试官:想了解应聘者之前公司接触的 ES 使用场景.规模,有没有做过比较大 规模的索引设计.规划.调优. 解答: 如实结合自己的实践场景回答即可. 比如:ES 集群架构 13 个节点,索引根据通道不同 ...

  3. mac phpstorm返回文件顶部或者底部

    在Mac下,请按FN+Command+→|←,就这么简单~

  4. Oracle入门基础(七)一一集合运算

    SQL> /* SQL> 查询10和20号部门的员工 SQL> 1. select * from emp where deptno=10 or deptno=20; SQL> ...

  5. 解释 MySQL 外连接、内连接与自连接的区别 ?

    先说什么是交叉连接: 交叉连接又叫笛卡尔积,它是指不使用任何条件,直接将一 个表的所有记录和另一个表中的所有记录一一匹配. 内连接 则是只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合 条 ...

  6. USB与电池切换电路图

  7. css写作建议和性能优化小结

    1.前言 还有几天就到国庆中秋了,快要放假了,先祝大家节日快乐!之前写过js的写作建议和技巧,那么今天就来聊聊css吧!说到css,每一个网页都离不开css,但是对于css,很多开发者的想法就是,cs ...

  8. 推荐简约漂亮的小程序插件 calendar

    公司团队制作,主要用于内部使用,觉得这个感觉不错,所以推荐出来,让大家试试~ 日历功能 日历基本功能,自定义样式 先睹为快 使用方法: 1. 在微信小程序管理后台--设置--第三方服务,按 AppID ...

  9. vue全家桶+axios+jsonp+es6 仿肤君试用小程序

    vue全家桶+axios+jsonp+es6 仿肤君试用小程序 把自己写的一个小程序项目用vue来实现的,代码里面有一些注释,主要使用了vue-cli,vue,vuex,vue-router,axoi ...

  10. SecureCRT显示连接失败的原因

    问题描述:连接后像192.168.111.140那样的红色图标 原因:没有开启对应的虚拟机 解决办法:打开对应的虚拟机