【解题报告】Educational Codeforces Round 14

【解题报告】 Educational Codeforces Round 19 简略的解题报告。 阅读详情

题目链接


A. Fashion in Berland(Codeforces 691A)

思路

根据题意,只需要检查输入的序列中0的个数是否为1即可。另外需要特判夹克上只有一颗扣子的情况。

代码

#include <bits/stdc++.h>
using namespace std;

int n, a, cnt;

int main() {
    scanf("%d", &n);
    for(int i = 0; i < n; i++) {
        scanf("%d", &a);
        cnt += a;
    }
    if(n == 1) {
        puts(cnt == 1 ? "YES" : "NO");
    }
    else {
        puts(cnt == n - 1 ? "YES" : "NO");
    }
    return 0;
}

B. s-palindrome(Codeforces 691B)

思路

先建立一个映射表,将所有英文字母映射到与其具有对称结构的英文字母上,然后将字符串反转,再将其用映射表映射成另一个字符串。判断构造出来的字符串是否与原串相同即可。(下面代码构造映射表的方式太麻烦,用两个字符串来表示映射关系会更好)

#include <bits/stdc++.h>
using namespace std;

bool ok;
string s, t;
map <int, int> m;

void init() {
    for(int i = 'A'; i <= 'z'; i++) {
        m[i] = '#';
    }
    m['A'] = 'A'; m['H'] = 'H'; m['I'] = 'I';
    m['M'] = 'M'; m['O'] = 'O'; m['T'] = 'T';
    m['U'] = 'U'; m['V'] = 'V'; m['W'] = 'W';
    m['X'] = 'X'; m['Y'] = 'Y'; m['b'] = 'd';
    m['d'] = 'b'; m['o'] = 'o'; m['p'] = 'q'; 
    m['q'] = 'p'; m['v'] = 'v'; m['w'] = 'w'; 
    m['x'] = 'x';
}

int main() {
    init();
    cin >> s;
    t = s;
    reverse(t.begin(), t.end());
    ok = true;
    for(int i = 0; i < s.size(); i++) {
        if(m[t[i]] != s[i]) {
            ok = false;
        }
    }
    puts(ok ? "TAK" : "NIE");
    return 0;
}

C. Exponential notation(Codeforces 691C)

思路

  • 如果输入的是小于 1 的数的话,就从小数点开始往后查找,找到第一个非零的数位,假设这个数位上的数是 x ,根据 x 与小数点的位置可以确定 aEb 中的 b 是多少。最后先后将 x 、小数点和 x 之后的非零数字拼接起来就是 aEb 中的 a 。
  • 如果输入的是大于或等于 1 的数的话,就从小数点开始向前查找,原理与上一个情况相同。

代码

#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e6 + 5;
char str1[maxn];
char str2[maxn];

int main() {
    scanf("%s",str1);
    int len_str1 = strlen(str1);
    int point = len_str1;
    for(int i = 0; i < len_str1; i++) {
        if(str1[i]=='.') {
            point = i;
            break;
        }
    }
    int flag_point;
    int len_str2;
    for(int i=0; i<len_str1; i++) {
        if(str1[i]>'0'&&str1[i]<='9') {
            str2[0]=str1[i];
            str2[1]='.';
            flag_point=i+1;
            len_str2=1;
            for(int j=i+1; j<len_str1; j++)
                if(str1[j]>='0'&&str1[j]<='9')
                    str2[++len_str2]=str1[j];
            break;
        }
    }
    for(int i=len_str2; i>=1; i--) {
        if(str2[i]=='0'||str2[i]=='.') {
            len_str2--;
        }
        else {
            break;
        }
    }
    for(int i=0; i<=len_str2; i++) {
        printf("%c",str2[i]);
    }
    if(point != flag_point) {
        point>flag_point?printf("E%d\n",point-flag_point):printf("E%d\n",point-flag_point+1);
    }
    return 0;
}

D. Swaps in Permutation(Codeforces 691D)

思路

当允许两个位置进行交换操作时,这两个位置就发生了联系,而且在思考中我们可以发现这种联系是可交换的,也是可传递的。于是我们就可以用无向图表示这种联系。其中点用来表示位置,边用来表示位置之间的联系。
建图完毕后,图必然由若干个连通分量组成。连通分量的意义是,该分量中的位置上的数可以任意排序。根据题意,我们要让同一个分量中大的数排在前面,小的数排在后面,并且对每个分量做这样的排序。那么在完成排序后,总序列一定是符合条件的。
实现上,连通的信息可以用并查集维护(因为除连通信息外不需要用图的其它信息了),除此之外还需要一个从连通分量映射到该分量中所有点的表。这样就能快速地从连通分量中将数提取出来,排序后再放回。

代码

#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e6 + 10;
int n, m, u, v, a[maxn], p[maxn];
vector <int> vec, G[maxn];

void init() {
    for(int i = 1; i <= n; i++) {
        p[i] = i;
    }
}

int Find(int x) {
    return x == p[x] ? x : p[x] = Find(p[x]);
}

void Union(int x, int y) {
    x = Find(x);
    y = Find(y);
    if(x == y) {
        return;
    }
    p[x] = y;
}

int main() {
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
    }
    init();
    while(m--){
        scanf("%d%d", &u, &v);
        Union(u, v);
    }
    for(int i = 1; i <= n; i++) {
        G[Find(i)].push_back(i);
    }
    for(int i = 1; i <= n; i++) {
        if(G[i].size() == 1) {
            continue;
        }
        vec.clear();
        for(int idx : G[i]) {
            vec.push_back(a[idx]);
        }
        sort(vec.begin(), vec.end(), [] (int x, int y) { return x > y; });
        for(int j = 0; j < G[i].size(); j++) {
            int idx = G[i][j];
            a[idx] = vec[j];
        }
    }
    for(int i = 1; i <= n; i++) {
        printf("%d ", a[i]);
    }
    return 0;
}

E. Xor-sequences(Codeforces 691E)

思路

本题看上去是个复杂的计数问题,实则不然。对于题中的“异或序列”而言,其中的数字的排列方式是由异或模3这种运算决定的。也就是说数字的排列可以看成某种关系。数字 a 和 b 满足 a⨁bmod3=0 , a 才能排在 b 前面(或者相反)。
用图的观点看待这种关系的话,如果代表 a 的点和代表 b 的点满足前述关系,则它们之间有一条无向边相连。也就是说一个长度为 k 的排列对应了图中的一条长度为 k 的路径。如果我们将图用邻接矩阵表示出来,设该矩阵的 k 次幂为 ans ,则 ans[i][j] 恰好表示从点 i 到点 j 的长度为 k 的路径有多少条(不必太过纠结,当成结论记忆就好)。
于是问题就转化成了求邻接矩阵的 k 次幂。在 k 很大的情况下用矩阵快速幂就可以实现。

代码

#include <bits/stdc++.h>
using namespace std;

const int mod  = 1e9 + 7;
const int maxn = 105;
typedef long long ll;

template <class T>
struct matrix {
    int n, m;
    T a[maxn][maxn];
    matrix(int n = 0, int m = 0): n(n), m(m) {
        memset(a, 0, sizeof(a));
    }
    matrix modMul(matrix &b, T mod) const {
        matrix tmp(n, b.m);
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < b.m; j++) {
                for(int k = 0; k < m; k++) {
                    T t = a[i][k] * b.a[k][j] % mod;
                    tmp.a[i][j] = (tmp.a[i][j] + t) % mod;
                }
            }
        }
        return tmp;
    }
    matrix modPow(T e, T mod) const {
        matrix a = *this, tmp(n, n);
        for(int i = 0; i < n; i++) {
            tmp.a[i][i] = 1;
        }
        for(; e > 0; e >>= 1) {
            if(e & 1) {
                tmp = tmp.modMul(a, mod);
            }
            a = a.modMul(a, mod);
        }
        return tmp;
    }
};

int n;
ll k, sum, a[maxn];

int main() {
    cin >> n >> k;
    if(k == 1) {
        cout << n << endl;
        return 0;
    }
    for(int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    matrix <ll> mat(n, n), ans(n, n);
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            if(bitset<64>(a[i] ^ a[j]).count() % 3 == 0) {
                mat.a[i-1][j-1] = 1;
            }
        }
    }
    ans = mat.modPow(k - 1, mod);
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            sum = (sum + ans.a[i][j]) % mod;
        }
    }
    cout << sum << endl;
    return 0;
}

F. Couple Cover(Codeforces 691F)

思路

先将问题转化为求比 p 小的数对的个数。先统计每个数的出现次数。再暴力枚举数对中的两个数,因为 p 的最大值是 3e6 ,所以枚举出来的两个数的乘积也不超过 3e6 。将枚举的数的乘积限制一下,枚举的复杂度就降为 O(nlogn) 了。出现 logn 是因为这个式子:

∑ni=11i=O(log(n))

代码

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const int maxa = 3e6;
ll n, a, all, m, q, num[maxa], sum[maxa];

int main() {
    scanf("%I64d", &n);
    all = n * (n - 1);
    while(n--) {
        scanf("%I64d", &a);
        m = max(m, a);
        num[a]++;
    }
    for(ll i = 1; i <= m; i++) {
        for(ll j = 1; j <= m; j++) {
            if(i * j > maxa) {
                break;
            }
            if(i == j) {
                sum[i*i] += num[i] * (num[i] - 1);
            }
            else {
                sum[i*j] += num[i] * num[j];
            }
        }
    }
    for(ll i = 2; i <= maxa; i++) {
        sum[i] += sum[i-1];
    }
    scanf("%I64d", &q);
    while(q--) {
        scanf("%I64d", &a);
        printf("%I64d\n", all - sum[a-1]);
    }
    return 0;
}

【解题报告】Educational Codeforces Round 20 简略的解题报告。 阅读详情

相关推荐

【解题报告】Educational Codeforces Round 15

简略的解题报告。

TRiddle的博客 1045

Fashion in Berland

Description According to rules of the Berland fashion, a jacket should be fastened by all the buttons except only one, but not necessarily it should be the last one. Also if the jacket has only one

杭锦泉的博客 940

eNSP无法启动AR报错码40,而且按照eNSP帮助手册排查都没用,我的处理方法【自己存档版】

eNSP无法启动AR报错码40,而且按照eNSP帮助手册排查都没用,我的处理方法【自己存档版】

mizhiakk的博客 8422

Educational Codeforces Round 141 (Rated for Div. 2) 题解

Educational Codeforces Round 141 (Rated for Div. 2) 题解

m0_55733023的博客 451

Codesys电子凸轮从入门到应用:手把手教你用MC_CamIn/MC_CamOut实现主从轴同步

本文详细介绍了如何在Codesys平台上使用MC_CamIn和MC_CamOut功能块实现电子凸轮的主从轴同步控制。从环境配置、轴使能到凸轮表创建与动态切换,提供了完整的程序编写指南和调试技巧,帮助工程师快速掌握工业自动化中的高精度运动控制技术。

weixin_26878995的博客 277

Star CCM+中衍生零部件下的阈值应用与区域内删除目标网格

同样的在绘制网格结束后,有时出现负体积网格或质量差的网格,为了节约时间成本,可能会选择将负体积的网格或质量差的网格删除。弹出相应的窗口,在窗口中选择相应的区域①,选择标量函数②(此处以网格体积变化为例),选择模型③,设置阈值④,选择No Dispalyer,会根据需求选择显示,最后点击Create⑥完成创建。此处以温度为例,若出现温度异常点,首先在①栏中勾选Function,然后在下面点击⑤Select,在弹出的Function窗口中选择温度场函数,再点击④Identify,查找温度异常网格数量。

2201_75375391的博客 2222

Educational Codeforces Round 14 题解

A Fashion in Berland模拟: http://blog.youkuaiyun.com/baidu_19306071/article/details/51919011B s-palindrome模拟,字符串: http://blog.youkuaiyun.com/baidu_19306071/article/details/51919143C Exponential notation模拟,字

我为刀俎_题为鱼肉 630

DeepSeek+Dify实战:零代码构建智能SQL生成器

本文详细介绍了如何利用DeepSeek和Dify零代码构建智能SQL生成器,帮助非技术人员通过自然语言查询数据库。文章涵盖从数据准备、知识库设计到Agent配置的全流程,并提供了优化技巧和实际应用案例,显著提升团队数据查询效率。

weixin_29311017的博客 419

Educational Codeforces Round 14 D. Swaps in Permutation (并查集orDFS)

题目链接:http://codeforces.com/problemset/problem/691/D 给你n个数,各不相同,范围是1到n。然后是m行数a和b,表示下标为a的数和下标为b的数可以交换无数次。问你最后字典序最大的数列是什么。 将下面的a和b用并查集联系起来存到祖节点对应的数组中,然后从大到小排序数组,最后依次按照父节点的数组中的顺序输出。 也可以用dfs的方法解(略麻烦),形成...

weixin_30302609的博客 169

使用VScode编译AMI代码

我现在了解到的和拿到的code,都是基于AMI的code,一般的编译AMI都需要搭配使用AMI的编译环境Veb,而Veb用到现在,一直都觉得有点卡顿,浏览代码的体验也比VScode差很多。在这之前还要,考虑设置TOOLS_DIR和EWKE_DIR的环境变量,因为在Veb中是可以通过设置自动设置的,但是VScode里面没用设置环境变量的选项。这里可以看出,Veb工具栏中的Build和Rebuild All的命令对应这里的make和make rebuild,也就是说Veb是调用此命令进行编译的。

Dodijd的博客 1881

YOLOv8人工智能与深度学习——强化学习

本文介绍了将YOLOv8目标检测模型与强化学习结合的方法。主要应用包括自适应目标检测(动态调整检测参数)、主动学习(智能选择标注样本)和多目标跟踪优化。实现方案采用深度Q网络策略,通过定义状态表示、动作空间和奖励函数,使检测系统能根据环境反馈优化性能。该方法具有自适应优化、资源高效、持续改进等优势,能构建更智能的计算机视觉系统。文章详细说明了强化学习环境的构建、策略网络的实现以及训练过程,并提供了代码示例。

u010117029的博客 259

Educational Codeforces Round 141 (Rated for Div. 2)C. Yet Another Tournament

思路:尽量让胜场更多,再想办法打败胜场跟我们相同的那个人,这样的话这个人的胜场不会加1。这时我们的胜场为x。如果我们没有全胜,一定能找到另外一个胜场为x的人。假如我们剩余的m加上排完序之后最后一个打败的人的权值>=这个胜场为x的人的权值则胜场不变。找到和我们胜场相同的人的位置。这个人的名次就是我们的名次。我有可以分配的一个数m如果我想赢第i个人我就要支出b[i]。赢了一个人我的胜场加一,输了那个人的胜场加一。最终名次按照胜场从大到小为1.2.3......问如何分配我的m可以让我的名次尽量靠前。

changshu21的博客 260

基于电阻分压 + 电压跟随器的直流母线电压采样电路

摘要:本文介绍了一种基于电阻分压和电压跟随器的直流母线电压采样电路设计。该电路通过R38(240kΩ)和R41(20kΩ)组成的分压网络将高电压(如48V)降至3V,再经GS8331运放构成的电压跟随器进行隔离缓冲,最后通过RC滤波输出给ADC采集。重点分析了关键元件的选型要求:分压电阻需高精度、低温度系数;运放需高输入阻抗、低失调电压;滤波电容需稳定性好。该设计适用于工业电源、新能源BMS、变频器等需要高精度电压采样的应用场景。

qq_37999850的博客 891

【解题报告】Educational Codeforces Round 13

简略的解题报告。

TRiddle的博客 1416

【雕爷学编程】MicroPython手册之 Teensy 4.1 实时时钟 (RTC)

在类的初始化函数中,定义了用于控制I2C总线的i2c对象和RTC模块的I2C地址。接着,使用该引脚初始化了一个Pin对象。它还提供了8个串口,3个SPI端口,3个I2C端口,2个I2S/TDM数字音频端口,3个CAN总线(其中一个支持CAN FD),以及一个SDIO(4位数据)原生SD卡端口12。2、内存:Teensy 4.1配备了1024 KB的RAM(其中512 KB是紧密耦合的),8 MB的Flash(其中64 KB用于恢复和EEPROM模拟),以及两个位置可以选择添加更多的QSPI内存芯片。

雕爷学编程 575

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【解题报告】 Educational Codeforces Round 40

题目链接 A. Diagonal Walking(Codeforces 954A) 题意 给出一个仅含RRR和UUU的字符串。问如何进行一系列操作(每次操作可以将连续的RURURU或URURUR替换DDD),使得最后得到的字符串长度最小。 思路 本题的入手点是,先贪心地提出一个算法,再看看有没有更优的算法。 显然,我们可以提出这样的贪心算法:从左到右依次考虑字符串sss...

TRiddle的博客 1152

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Codeforces Educational Round 95 解题报告

Codeforces Educational Round 95 解题报告 A. 题解: ​ 计算出所需要的棍子数量 sticks = k * ( y + 1),然后答案是 (stick−1)/(x−1)+((stick−1)mod  (x−1)==0?1:0)+k (stick - 1)/(x - 1) + ((stick-1)\mod (x-1) == 0 ? 1 : 0) + k (stick−1)/(x−1)+((stick−1)mod(x−1)==0?1:0)+k B. 题解: ​ 将unlocke

一个蒟蒻的博客 364

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Educational Codeforces Round 81 (Rated for Div. 2)解题报告

Educational Codeforces Round 81 (Rated for Div. 2) 【A.Display The Number】 【题目大意】 问你用n根火柴能表示的最大数字是多少 【解题思路】 容易想到1只需要两根火柴,那么尽量用1,有多的将第一位改为7 【AC代码】 #include <bits/stdc++.h> #define N 100 #define ma...

weixin_44211980的博客 581

【解题报告】Educational Codeforces Round 105 | ABCD

【解题报告】Educational Codeforces Round 105 | ABCDA:ABC String | QDB:Berland Crossword | 枚举C:1D Sokoban | 前/后缀和 + 滑动窗口D:Dogeforces | LCA + 贪心重构 Educational Codeforces Round 105 A:ABC String | QD … B:Berland Crossword | 枚举 给 n×nn\times nn×n 白方格染黑,要求最上层、最右层、最下

溢流眼泪的博客 439

【解题报告】Educational Codeforces Round 21

简略的解题报告。

TRiddle的博客 593

Educational Codeforces Round 178 Div. 2

Educational Codeforces Round 178 (Rated for Div. 2)(2104A-2104G)题解

LancyMorry的博客 927

Educational Codeforces Round 112 (Rated for Div. 2) ABCDE 解题思路

Educational Codeforces Round 112 (Rated for Div. 2) 只做了ABCDE,但被AE卡了我是没想到的,CE分别一发RE也傻了 A - PizzaForces 题意 做小尺寸的pizza可以切成666片,要花151515​分钟 做中尺寸的pizza可以切成888​片,要花202020​分钟 做大尺寸的pizza可以切成101010​​片,要花252525​​分钟 现在Petya家来了nnn位客人,他想让每个客人都至少能吃到一块pizza 问做出符合需求数量的p

StelaYuri's Blog 753

Educational Codeforces Round 100 A—D题题解

A. Dungeon 题目传送门: A. Dungeon 题目大意: 三个怪物具有a,b,c的血量,每发射一次炮弹,会对一个怪物造成一点伤害。每发射6次之后,第7次就是蓄力炮,对三个怪物同时造成一点伤害。问三个怪物能不能被同一个蓄力炮同时杀死。 思路: 如果a + b + c 的和sum是9的倍数原因是只有9的倍数才可能被蓄力炮同时秒掉。且min(a,b,c)>=sum/9 ,因为在最后一次蓄力炮之前,每个怪物都不能死。 AC Code #include<bits/stdc++.h> us

稚始稚终的博客 1904

【解题报告】Educational Codeforces Round 9

简略的解题报告。

TRiddle的博客 721

解题报告:Educational Codeforces Round 24 D,E,F

D、题目链接 题意: 给定一个长度为n的序列,给定一个数a,询问是否存在数b满足从前往后遍历序列,数b出现的次数始终大于等于数a出现的次数。 思路: 把每两个数a之间看做一个筛选阶段,每次筛选掉之前出现的次数没有前面数a出现次数多的数,最后剩下的就是答案。 代码: #include using namespace std; int A[100005]; vectorV;

Hee的博客~ 736

Educational Codeforces Round 92 (Rated for Div. 2)解题报告

Educational Codeforces Round 92 (Rated for Div. 2) A. LCM Problem 题目大意 给定区间[l,r][l, r][l,r],让你找到正整数xxx,yyy满足l≤x<y≤rl \leq x < y \leq rl≤x<y≤r,并且l≤lcm(x,y)≤rl \leq lcm(x, y) \leq rl≤lcm(x,y)≤r 解题思路 根据题意有: l≤lcm(x,y)=x×ygcd(x,y)≤rl \leq lcm(x,y)=\fr

weixin_44211980的博客 286
上一篇: 【解题报告】Codeforces Round #376 (Div. 2)
下一篇: 【解题报告】Codeforces Round #378 (Div. 2)
TRiddle
博客等级 码龄11年 14粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值