Atcoder beginner contest 303

news2024/11/26 6:23:17

A - Similar String

AC代码: 

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
    int n;
    cin >> n;
    string s, t;
    cin >> s >> t;
    bool flag = true;
    for (int i = 0; i < n; i++) {
        if (s[i] == t[i] || s[i] == '1' && t[i] == 'l' || s[i] == 'l' && t[i] == '1' || s[i] == '0' && t[i] == 'o' || s[i] == 'o' && t[i] == '0') continue;
        else {
            flag = false;
            break;
        }
    }
    if (flag) puts("Yes");
    else puts("No");
    return 0;
}

B - Discord 

n个人

共m张照片,每张照片都是n个人排在一行,如果两个人没有挨在一起,他们就有可能感情不好,问可能有几对人感情不好

数据很小,直接模拟即可

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 60;
bool e[N][N];
int a[N][N];
int main()
{
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> a[i][j];
        }
    }
    for (int i = 1; i <= m; i++) {
        for (int j = 2; j <= n; j++) {
            e[a[i][j - 1]][a[i][j]] = e[a[i][j]][a[i][j - 1]] = true;
        }
    }
    int cnt = 0;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            if (!e[i][j]&&i!=j) cnt++;
        }
    }
    cout << cnt / 2 << endl;
    return 0;
}

C - Dash 

一个二维平面,小明一开始在原点(0,0)处,初始健康值为H,一共有M个物品可以获得健康值,它们的位置都已知

小明将会走N步,当前坐标为(x,y),消耗1健康值来走一步,根据Si来确定走的方向,

(x+1,y) if Si is R;

(x−1,y) if Si is L;

(x,y+1) if Si is U;

(x,y−1) if Si is D.

如果小明的健康值小于K,并且他所在的位置有物品,那么他的健康值变为K

如果他的健康值为负值,那么他就走不了了

问小明能否走完N步

感觉就是一个模拟题,但是数据比较大,如果用二维数组的话,会爆空间,想着能用哈希表压缩一下空间,使空间集中

但是没有得到满分,不知道哪里出了问题,可能是哈希冲突吧

代码如下: 

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long LL;
const int N = 99999997;
LL q[N];
//bool flag[N];
LL get_key(int x, int y) {
    return x * 1000000001ll + y;
}
int find(int x,int y) {
    LL key = get_key(x, y);
    int t = (key % N + N) % N;
    while (q[t] != -1 && q[t] != key) {
        t++;
        if (t == N) t = 0;
    }
    return t;
}
int main()
{
    memset(q, -1, sizeof q);
    int n, m, h, k;
    cin >> n >> m >> h >> k;
    string s;
    cin >> s;
    while(m--) {
        int x, y;
        cin >> x >> y;
        int t = find(x, y);
        if (q[t] == -1) q[t] = get_key(x, y);
    }
    int a = 0;
    int b = 0;
    for (int i = 0; i < n; i++) {
        if (s[i] == 'R') a++;
        else if (s[i] == 'L') a--;
        else if (s[i] == 'U') b++;
        else b--;
        h--;
        if (h < 0) {
            puts("No");
            return 0;
        }
        else {
            int t = find(a, b);
            //printf("a=%d,b=%d\n",a,b);
            if (q[t] != -1 && h < k) {
                //printf("key=%lld,t=%d,h=%d,k=%d\n", get_key(a,b),t, h,k);
                h = k;
            }
        }
    }
    puts("Yes");
    return 0;
}

然后正当我一筹莫展时 

我通过看Virtual Standings,看到了一种我一看就懂的代码

纯模拟,不过不用数组,而是用set

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string.h>
#include<cstdio>
#include<set>
using namespace std;
int main()
{
    set<pair<int,int>>st;
    int n, m, h, k;
    cin >> n >> m >> h >> k;
    string s;
    cin >> s;
    while(m--) {
        int x, y;
        cin >> x >> y;
        st.insert({x,y});
    }
    int a = 0;
    int b = 0;
    for (int i = 0; i < n; i++) {
        if (s[i] == 'R') a++;
        else if (s[i] == 'L') a--;
        else if (s[i] == 'U') b++;
        else b--;
        h--;
        if (h < 0) {
            puts("No");
            return 0;
        }
        if (h < k && st.count({ a,b })) {
            h = k;
            st.erase({ a,b });
        }
    }
    puts("Yes");
    return 0;
}

D - Shift vs. CapsLock 

一共有三个按键,按每个键都要花费一定时间,问最少花多长时间能得到字符串S(由a和A组成),其中字符串S是事先给定的

花z毫秒来开关灯,起初灯是灭的

要想得到a,可以在灯灭的情况下花x毫秒,也可以在灯亮的情况下花y毫秒

要想得到A,可以在灯亮的情况下花x毫秒,也可以在灯灭的情况下花y毫秒

可以用动态规划,通过状态转移,用二维,第二维表示灯的状态,亮还是灭

其中z+min(x,y)的意思是从灯亮到灯灭得到a,可以先花z毫秒关灯,再花x毫秒得到a,也可以先花y毫秒得到a,再花z毫秒关灯,所以最少花费时间为z+min(x,y)

AC代码: 

#include<iostream>
#include<algorithm>
#include<cstring>
#define int long long
using namespace std;
const int N = 3e5 + 10;
int f[N][2];
signed main()
{
    int x, y, z;
    cin >> x >> y >> z;
    string s;
    cin >> s;
    int n = s.size();
    //初始状态
    if (s[0] == 'a') {
        f[0][0] = x;
        f[0][1] = z+min(x, y);
    }
    else {
        f[0][0] = y;
        f[0][1] = z+min(x, y);
    }
    for (int i = 1; i <n; i++) {
        if (s[i] == 'a') {
            f[i][0] = min( f[i - 1][0] + x,f[i - 1][1] + z + min(x,y));
            f[i][1] = min(f[i - 1][1] + y, f[i - 1][0] + z + min(x,y));
        }
        else {
            f[i][0] = min(f[i - 1][0] + y, f[i - 1][1] + z + min(x,y));
            f[i][1] = min(f[i - 1][1] + x, f[i - 1][0] + z + min(x,y));
        }
    }
    cout << min(f[n - 1][0], f[n - 1][1]) << endl;
}

E - A Gift From the Stars 

参考叶梦璃愁 

大致题意是有若干个star(star指的是一个顶点与其它k个点各连一条边,叫做level-k star),将所有star用一条边将叶子节点连成一个图(n个点,n-1条边),求每个star的点的个数

关键在于找到每个star的顶点,其中与叶子节点相连的点肯定是star的顶点,然后每个star的顶点相差3个倍数的边

AC代码: 

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int N = 2e5 + 10;
int d[N];
bool st[N];
vector<vector<int> >e(N);
queue<pair<int,int>>q;
vector<int>ans;
int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n - 1;i++) {
        int u, v;
        cin >> u >> v;
        e[u].push_back(v);
        e[v].push_back(u);//点u和点v连边
        d[u]++, d[v]++;//度数加1
    }
    //找到一个度数为1的点,将与它相连的另一个点(即star的顶点)入队
    for (int i = 1; i <= n; i++) {
        if (d[i] == 1) {
            q.push({ e[i][0],0 });
            break;
        }
    }
    //bfs,宽度优先搜索,利用队列
    while (q.size()) {
        auto t = q.front();
        q.pop();
        int u = t.first, dist = t.second;
        int cnt = 0;//统计每个点的边数
        //对于点u,统计它的边数
        for (auto v : e[u]) {
            if (!st[v]) q.push({ v, dist + 1 });
            st[v] = true;
            cnt++;
        }
        if (dist % 3 == 0) ans.push_back(cnt);
    }//将答案放入vector容器中
    sort(ans.begin(), ans.end());//将答案从小到大排序
    for (auto x : ans) cout << x <<" ";
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/598718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx-Host绕过复现

目录 环境搭建&#xff1a; 第一种处理方式 第二种处理方式 第三种处理方式 原理依据&#xff1a;Nginx与PHP对Host处理方式不同 环境搭建&#xff1a; 1、提前安装完成nginxphpmysql&#xff0c;然后上传文件pwnhub到nginx/html下 2、修改nginx.conf配置文件&#xff1…

集权攻击系列:如何利用PAC新特性对抗黄金票据?

黄金票据简介 黄金票据是一种常见的域内权限维持手段&#xff0c;这种攻击主要是利用了Kerberos认证过程中TGT票据由KRBTGT用户的hash加密的特性&#xff0c;在掌握KRBTGT用户密码之后可以通过签发一张高权限用户的TGT票据&#xff0c;再利用这个TGT向KDC获取域内服务的ST来实…

ChatGPT 使用 拓展资料:2023年6月 吴恩达大咖Deeplearning.ai最新课程

ChatGPT 使用 拓展资料:2023年6月 吴恩达大咖Deeplearning.ai最新课程 Deeplearning.ai刚刚发布几个新的课程https://www.deeplearning.ai/short-courses/?utm_campaign=May%20Short%20Course%20Launch&utm_content=250952287&utm_medium=social&utm_source=link…

2023上半年软件设计师-试题详解与分析

目录 前言 上午题 计算机组成原理 信息安全 计算机相关法律 软件设计 语言处理 操作系统 软件工程 软件测试 面向对象编程 程序设计语言 数据库 数据结构与算法 计算机网络 计算机专业英语 下午题 数据流图 数据库 UML 算法与C语言 面向对象程序设计 前…

4 款原型设计软件助你成为优秀的产品经理

原型设计是产品经理必备的技能。对于产品经理来说&#xff0c;在原型设计的过程中&#xff0c;必然会使用各种原型设计软件。为了保证后续工作的稳定进行&#xff0c;必须满足初始原型设计图纸&#xff0c;而绘制原型设计图纸常用的原型设计软件很多&#xff0c;很多人不知道如…

文心一言 vs GPT4

本周真是科技爱好者的狂欢节。GPT4和文心一言接连发布&#xff0c;AI工具已经开始走进千家万户。 拿文心一言发布会上的几个问题调戏了 GPT4 一下&#xff0c;看看表现如何。 第一个为文心的回答&#xff0c;第二个为GPT4 的回答。 1. 可以总结一下三体的核心内容吗&#xf…

活动预告 | 2023 Meet TVM · 北京站定档,5 场 Talk 你最期待哪一场?

内容一览&#xff1a;2023 Meet TVM 线下聚会第二站定档 6 月 17 日&#xff01;这次我们设定了 5 个 Talk&#xff0c;期待和大家在北京中关村相聚&#xff01; 关键词&#xff1a;编译器 线下活动 2023MeetTVM 3 月 4 日&#xff0c; 2023 Meet TVM 首场线下活动在上海成功举…

awk实战案例

插入新字段 例&#xff1a;在“a b c d”中b的后面插入“e f g” echo "a b c d" | awk {$2$2" e f g";print} 格式化空白 移除每行的前缀、后缀空白&#xff0c;并将各部分左对齐 [rootlocalhost ~]# cat 1.txt aaaa bbb ccccc bbbb …

opencv笔记:高斯滤波和中值滤波对椒盐噪声的处理

目录 1. 椒盐噪声简介 2. 高斯滤波的原理和实现 2.1. 高斯滤波的原理 2.2. 高斯滤波的API 3. 中值滤波的原理和实现 3.1. 中值滤波的原理 3.2. 中值滤波的API 4. 高斯滤波和中值滤波对椒盐噪声的处理结果 数字图像处理中&#xff0c;噪声会导致图像质量下降和信息的丢失&a…

SpringMVC第九阶段:Restful风格实现的CRUD

Restful风格实现的CRUD图书 把前面的传统请求方式的图书的CRUD换成刚刚讲的Restful风格的图书模块的CRUD。只需要修改页面端的请求方式和地址&#xff0c;以及服务器端Controller的接收。 1、列表功能实现 Controller中的修改: RequestMapping(value "/book",me…

C++ 后台开发面试时一般考察什么?

总体来说&#xff0c;C面试中&#xff0c;对这门语言本身内容的考察并不多&#xff0c;更多考察的是 C 背后的技术栈&#xff0c;更多倾向考察一些原理性和基础性的问题&#xff0c;高级岗位会考察一些工作经历和经验。 总结起来一句话&#xff1a;初级看基础&#xff0c;高级…

hashlib和hmac模块

目录 ❤ hashlib模块 hash是什么? 撞库破解hash算法加密 python从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129328397?spm1001.2014.3001.5502 ❤ hashlib模块 hash是什么? hash是一种算法&#xff08;Python3.版本里使用has…

DAY07_HTMLCSS

目录 1 HTML1.1 介绍1.1.1 WebStrom中基本配置 1.2 快速入门1.3 基础标签1.3.1 标题标签1.3.2 hr标签1.3.3 字体标签1.3.4 换行标签1.3.5 段落标签1.3.6 加粗、斜体、下划线标签1.3.7 居中标签1.3.8 案例 1.4 图片、音频、视频标签1.5 超链接标签1.6 列表标签1.6.1 列表中图表类…

供应链|供应商库存服务水平对零售商需求的影响

作者&#xff1a;Nathan Craig, Nicole DeHoratius, Ananth Raman 引用&#xff1a;Craig N, DeHoratius N, Raman A. The impact of supplier inventory service level on retailer demand[J]. Manufacturing & Service Operations Management, 2016, 18(4): 461-474. 文…

漏洞复现 CVE-2018-2894 weblogic文件上传

vulhub weblogic CVE-2018-2894 1、 搭建好靶场&#xff0c;按提示访问 http://192.168.137.157:7001/console 按照给出的文档&#xff0c;会查看容器的日志&#xff0c;找到管理员用户名/密码为 weblogic / h3VCmK2L&#xff0c;暂时用不到&#xff0c;不需要登录 2、未授权…

【轻量级网络】华为诺亚:VanillaNet

文章目录 0. 前言1. 网络结构2. VanillaNet非线性表达能力增强策略2.1 深度训练2.2 扩展激活函数 3. 总结4. 参考 0. 前言 随着人工智能芯片的发展&#xff0c;神经网络推理速度的瓶颈不再是FLOPs或参数量&#xff0c;因为现代GPU可以很容易地进行计算能力较强的并行计算。相比…

校园失物招领系统的设计与实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 校园失物招领系统&#xff0c;主要的模块包括首页、个人中心、公告信息管理、用户管理、物品类别管理、失物信息管理、招领信息管理、留言板…

速查-嵌入式物联网开发中常用的网络转换函数

速查-嵌入式物联网开发中常用的网络转换函数 常用的字节序转换函数-网络字节序与主机字节序的转换 如在 一文读懂大端、小端、字节序、MSB、LSB、MSBs、LSBs 中讲述的那样&#xff0c;主机字节序有大小端的区分&#xff0c;有些设备是大端&#xff08;Big Endian&#xff09;…

OJ题训练(二)

文章目录 反转链表题目来源题目描述知识点题解题解一&#xff08;递归实现&#xff09;图解 题解二&#xff08;双指针&#xff09;图解 反转链表 题目来源 牛客网 题目描述 给定一个单链表的头结点pHead(该头节点是有值的&#xff0c;比如在下图&#xff0c;它的val是1)&…

Nginx通过SplitClient进行AB测试以及负载均衡分流

文章目录 前言一、Split Clients是什么&#xff1f;二、使用步骤2.1 根据User-Agent进行分流2.2 根据Cookie进行分流2.3 根据IP地址进行分流2.4 根据时间进行分流2.5 根据随机数进行分流 总结 前言 Nginx是一个被广泛应用的Web服务中间件&#xff0c;今天分享一下如何用它做AB…