AtCoder Beginner Contest 233 (A-Ex)

news2024/11/20 1:43:47

A.根据题意模拟即可

B.根据题意模拟即可

C.直接用map 进行dp即可

D.用前缀和进行模拟,用map统计前缀和,每次计算当前前缀和-k的个数就是以当前点为右端点答案。

E - Σ[k=0..10^100]floor(X/10^k) (atcoder.jp)

        (1)题意

        (2)思路

                手动推一下这个东西就会发现,其实每一位上的贡献等于这一位后面的所有数加起来,因此做一个后缀和即可。

        (3)代码

#include <bits/stdc++.h>
#define rep(i,z,n) for(int i = z;i <= n; i++)
#define per(i,n,z) for(int i = n;i >= z; i--)
#define PII pair<int,int>
#define fi first
#define se second
#define vi vector<int>
#define vl vector<ll>
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) (x).begin(),(x).end()
using namespace std;
using ll = long long;
const int N = 5e5 + 10;
ll Ans[N],suf[N];
void solve()
{
    string x;
    cin >> x;
    reverse(all(x));
    for(int i = sz(x) - 1;i >= 0;i --) suf[i] = suf[i + 1] + (x[i] - '0');
    for(int i = 0;i < sz(x);i ++) {
        Ans[i] = suf[i]; 
    }    
    for(int i = 0;i < 500001;i ++) {
        Ans[i + 1] += Ans[i] / 10;
        Ans[i] %= 10;
    }
    int r = 500001;
    while(Ans[r] == 0) r --;
    while(r >= 0) cout << Ans[r --];
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    int T = 1;
    // cin >> T;
    while(T --) solve();
    return 0;
}

F - Swap and Sort (atcoder.jp)

        (1)题意

                有一个排列P,给出M组交换关系,第i组swap(Pai,Pbi),问是否有可能可以使P不降。

        (2)思路

                首先,若i和P[i]不在一个连通块,则一定不会交换成功,然后考虑如何交换,对于度数为1的点说明我们此时交换掉他并且不会影响后继,因此满足拓扑排序,那么我们直接根据拓扑排序进行交换即可。

        (3)代码

#include <bits/stdc++.h>
#define rep(i,z,n) for(int i = z;i <= n; i++)
#define per(i,n,z) for(int i = n;i >= z; i--)
#define PII pair<int,int>
#define fi first
#define se second
#define vi vector<int>
#define vl vector<ll>
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) (x).begin(),(x).end()
using namespace std;
using ll = long long;
const int N = 2e5 + 10;
struct DSU {
    vector<int> f,siz;
    int n;
    DSU(int _n) {
        n = _n;
        f.resize(n + 1);
        siz.resize(n + 1,1);
        iota(f.begin(),f.end(),0);
    }

    inline int find(int x) {
        if(x == f[x]) return x;
        return f[x] = find(f[x]);
    }

    inline bool same(int x,int y) {
        x = find(x),y = find(y);
        return x == y;
    }

    inline void merge(int x,int y) {
        if(same(x,y)) return ;
        x = find(x),y = find(y);
        siz[y] += siz[x];
        f[x] = y;
    }

    //目前连通块个数
    inline int connect() {
        int res = 0;
        for(int i = 1;i <= n;i ++) {
            res += (i == find(i));
        }
        return res;
    }

    //求某一个联通块得大小
    inline int count(int x) {
        x = find(x);
        return siz[x];
    }
};
int p[N],deg[N];
vector<PII> e[N];
vector<int> ans;
inline bool dfs(int u,int f,int tar)
{
    if(u == tar) return true;
    for(auto [v,id]: e[u]) {
        if(v == f) continue;
        if(dfs(v,u,tar)) {
            swap(p[u],p[v]);
            ans.pb(id);
            return true;
        }
    }
    return false;
}
void solve()
{
    int n;
    cin >> n;
    rep(i,1,n) cin >> p[i];
    DSU dsu(n);
    int m;
    cin >> m;
    rep(i,1,m) {
        int u,v;
        cin >> u >> v;
        if(!dsu.same(u,v)) {
            dsu.merge(u,v);
            e[u].pb({v,i});
            e[v].pb({u,i});
            deg[u] ++,deg[v] ++;
        }
    }
    queue<int> q;
    rep(i,1,n) {
        if(!dsu.same(i,p[i])) {
            cout << -1 << '\n';
            return;
        }
        if(deg[i] == 1) q.push(i);
    }
    while(!q.empty()) {
        int v = q.front();
        q.pop();
        int tar = 0;
        for(int i = 1;i <= n;i ++) {
            if(p[i] == v) {
                tar = i;
                break;
            }
        }
        if(!dfs(v,0,tar)) {
            cout << -1 << '\n';
            return;
        }
        for(auto [u,id]: e[v]) {
            if(-- deg[u] == 1) q.push(u);
        }
    }
    cout << sz(ans) << '\n';
    for(auto x : ans) cout << x << ' ';
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    int T = 1;
    // cin >> T;
    while(T --) solve();
    return 0;
}

G - Strongest Takahashi (atcoder.jp)

        (1)题意

                给你一个N*N的矩形,里面#代表的是障碍,.不是障碍,你每次可以选择一个D*D的矩形把里面的障碍清除掉会花费D,问你把N*N的障碍全部清除掉的最小花费是多少。

        (2)思路

                很明显的一个思路是,这个可以分治进行dp,考虑dp[l1][r1][l2][r2]表示消除[l1-l2][r1-r2]这个矩形的最小花费,我们每一次可以枚举横着切下去还是竖着切下去就行,或者整个是正方形也可以直接清除,取个最小花费即可。

        (3)代码

#include <bits/stdc++.h>
#define rep(i,z,n) for(int i = z;i <= n; i++)
#define per(i,n,z) for(int i = n;i >= z; i--)
#define PII pair<int,int>
#define fi first
#define se second
#define vi vector<int>
#define vl vector<ll>
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) (x).begin(),(x).end()
using namespace std;
using ll = long long;
const int N = 55;
int dp[N][N][N][N],s[N][N];
string mp[N];
const int inf = 0x3f3f3f3f;
int get(int x1,int y1,int x2,int y2)
{
    return s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1];
}
inline int dfs(int x1,int y1,int x2,int y2)
{
    if(dp[x1][y1][x2][y2] != -1) return dp[x1][y1][x2][y2];
    if(get(x1,y1,x2,y2) == 0) return dp[x1][y1][x2][y2] = 0;
    int mi = inf;
    for(int i = x1 + 1;i <= x2;i ++) {
        mi = min(mi,dfs(x1,y1,i - 1,y2) + dfs(i,y1,x2,y2));
    }
    for(int i = y1 + 1;i <= y2;i ++) {
        mi = min(mi,dfs(x1,y1,x2,i - 1) + dfs(x1,i,x2,y2));
    }
    if(x2 - x1 == y2 - y1) mi = min(mi,x2 - x1 + 1);
    return dp[x1][y1][x2][y2] = mi;
}
void solve()
{
    int n;
    cin >> n;
    memset(dp,-1,sizeof(dp));
    rep(i,1,n) {
        cin >> mp[i];
        mp[i] = " " + mp[i];
        rep(j,1,n) s[i][j] = s[i - 1][j] + s[i][j - 1] + (mp[i][j] == '#') - s[i - 1][j - 1];
    }
    cout << dfs(1,1,n,n);
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    int T = 1;
    // cin >> T;
    while(T --) solve();
    return 0;
}

Ex - Manhattan Christmas Tree (atcoder.jp)

        (1)题意

                二维平面上有N棵圣诞树,第i棵位于[xi,yi],要回答一下Q个问题,第i个问题是,以曼哈顿距离为单位,(ai,bi)和距离该点最近的Ki棵圣诞树之间的距离是多少?

        (2)思路

                考虑曼哈顿距离不好进行计算,因此转换成切比雪夫距离,源坐标系上(x,y)的曼哈顿距离等价于新坐标系上(x+y,x-y)的切比雪夫距离,(补充:源坐标系上(x,y)的切比雪夫距离等价于新坐标系上(\frac{x + y}{2},\frac{x - y}{2})的曼哈顿距离)看着切比雪夫距离,我们很容易想到直接二分距离,问题转变这个矩形平面内有多少点,也就是二维数点问题,因为点不是很稠密,我们考虑直接动态开点二维树状数组。

        (3)代码

#include <bits/stdc++.h>
#define rep(i,z,n) for(int i = z;i <= n; i++)
#define per(i,n,z) for(int i = n;i >= z; i--)
#define PII pair<int,int>
#define fi first
#define se second
#define vi vector<int>
#define vl vector<ll>
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) (x).begin(),(x).end()
using namespace std;
using ll = long long;
const int N = 5e5 + 10;
vector<int> ver[N << 1];
inline int lowbit(int x)
{
    return x & (-x);
}
inline void add(int x,int y)
{
    x += N,y += N;
    if(!y) y = 1;
    while(y < 2 * N) {
        ver[y].pb(x);
        y += lowbit(y);
    }
}
inline int get(int y,int x1,int x2)
{
    int Ans = 0;
    y += N,x1 += N,x2 += N;
    if(y >= 2 * N) y = 2 * N - 1;
    while(y > 0) {
        Ans += upper_bound(all(ver[y]),x2) - lower_bound(all(ver[y]),x1);
        y -= lowbit(y);
    }
    return Ans;
}
inline int query(int x1,int y1,int x2,int y2)
{
    return get(y2,x1,x2) - get(y1 - 1,x1,x2);
}
void solve()
{
    vector<PII> point;
    int n;
    cin >> n;
    rep(i,1,n) {
        int x,y;
        cin >> x >> y;
        point.pb({x + y,x - y});
    }
    sort(all(point));
    for(auto [x,y]: point) add(x,y);
    int q;
    cin >> q;
    while(q --) {
        int x,y,k;
        cin >> x >> y >> k;
        int z = x;
        x = z + y,y = z - y;
        int l = 0,r = N;
        while(l <= r) {
            int m = (l + r) >> 1;
            if(query(x - m,y - m,x + m,y + m) < k) l = m + 1;
            else r = m - 1;
        }
        cout << l << '\n';
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    int T = 1;
    // cin >> T;
    while(T --) solve();
    return 0;
}

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

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

相关文章

《XSS-Labs》02. Level 11~20

XSS-Labs 索引Level-11题解 Level-12题解 Level-13题解 Level-14题解 Level-15题解 Level-16题解 Level-17题解 Level-18~20题解 靶场部署在 VMware - Win7。 靶场地址&#xff1a;https://github.com/do0dl3/xss-labs 只要手动注入恶意 JavaScript 脚本成功&#xff0c;就可以…

第82步 时间序列建模实战:LightGBM回归建模

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们介绍LightGBM回归。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Syndr…

面试题:Kafka 为什么会丢消息?

文章目录 1、如何知道有消息丢失&#xff1f;2、哪些环节可能丢消息&#xff1f;3、如何确保消息不丢失&#xff1f; 引入 MQ 消息中间件最直接的目的&#xff1a;系统解耦以及流量控制&#xff08;削峰填谷&#xff09; 系统解耦&#xff1a; 上下游系统之间的通信相互依赖&a…

代码随想录算法训练营第五十六天 | 动态规划 part 14 | 1143.最长公共子序列、1035.不相交的线、53. 最大子序和(dp)

目录 1143.最长公共子序列思路代码 1035.不相交的线思路代码 53. 最大子序和&#xff08;dp&#xff09;思路代码 1143.最长公共子序列 Leetcode 思路 本题和718. 最长重复子数组 区别在于这里不要求是连续的了&#xff0c;但要有相对顺序&#xff0c;即&#xff1a;“ace” …

数据结构--队列与循环队列的实现

数据结构–队列的实现 1.队列的定义 比如有一个人叫做张三,这天他要去医院看病,看病时就需要先挂号,由于他来的比较晚,所以他的号码就比较大,来的比较早的号码就比较小,需要到就诊窗口从小号到大依次排队,前面的小号就诊结束之后,才会轮到大号来,小号每就诊完毕就销毁,每新来…

22.app.js的全局数据共享

app.js中定义的全局变量适合 不修改且仅在js中使用的变量 目录 1 全局变量 2 修改全局变量 3 app.js中的变量不能直接在wxml中渲染 4 全局方法 1 全局变量 比如我现在想定义一个全局的变量something&#xff0c;直接在APP中写就行了 之后你可以在任何一个页面中&…

嵌入式软件架构中抽象层设计方法

大家好&#xff0c;今天分享一篇嵌入式软件架构设计相关的文章。 软件架构这东西&#xff0c;众说纷纭&#xff0c;各有观点。什么是软件架构&#xff0c;我们能在网上找到无数种定义。 比如&#xff0c;我们可以这样定义&#xff1a;软件架构是软件系统的基本结构&#xff0c…

并查集详解(原理+代码实现+应用)

文章目录 1. 并查集概念2. 并查集原理2.1 合并2.1 找根 3. 并查集实现3.1 结构定义3.2 FindRoot&#xff08;找根&#xff09;3.3 Union&#xff08;合并&#xff09;3.4 IsInSet&#xff08;判断两个值是否在一个集合里&#xff09;3.5 SetCount&#xff08;并查集中集合个数&…

Pikachu靶场——文件上传漏洞(Unsafe upfileupload)

文章目录 1. Unsafe upfileupload1.1 客户端检查&#xff08;client check&#xff09;1.1.1 源代码分析 1.2 服务端检查&#xff08;MIME type&#xff09;1.2.1 源代码分析 1.3 getimagesize()1.3.1 源代码分析 1.4 文件上传漏洞防御 1. Unsafe upfileupload 漏洞描述 文件…

springboot中的@Configuration详解~

作用1&#xff1a;告诉springboot这是一个配置类&#xff0c;等同于之前在spring中的配置文件,而且配置类中可以使用Bean标注在方法上给容器注册组件&#xff0c;该组件默认也是单例 创建pet: package com.springboot.bean;import lombok.AllArgsConstructor; import lombok.…

【进阶C语言】进阶指针--学会所有指针类型

本节内容大致目录&#xff1a; 1.字符指针 2.指针数组&#xff08;数组&#xff09; 3.数组指针 &#xff08;指针&#xff09;--比较重要 4.函数指针--比较重要 5.函数指针数组--用的较少 6.指向函数指针数组的指针--只需要了解就可以 需要掌握每一种类型的符号和用处。…

Google ProtoBuf介绍

一、背景 前段时间了解到有公司用gRPC、Pulsar、Nacos、SkyWalking、OpenTelemetry、Prometheus、Envoy、Grafana、Sonar、PowerJob、Apollo 这些技术&#xff0c;也是Java路线的&#xff0c;很惭愧&#xff0c;这些我几乎都不了解&#xff0c;从13年以来玩Android、玩Python、…

Java 多输入框查询需求实现

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 多输入框查询 需求分析 任意一个输入框&#xff0c;输入内容点击搜索都可以精准搜索到对应的内容 代码实现 Controller接口编写 PostMapping("merchant/manage&…

文献阅读:RLAIF: Scaling Reinforcement Learning from Human Feedback with AI Feedback

文献阅读&#xff1a;RLAIF: Scaling Reinforcement Learning from Human Feedback with AI Feedback 1. 文章简介2. 方法介绍 1. 整体方法说明 3. 实验结果 1. RLHF vs RLAIF2. Prompt的影响3. Self-Consistency4. Labeler Size的影响5. 标注数据的影响 4. 总结 & 思考 文…

SpringCloudGateway网关中各个过滤器的作用与介绍

文章目录 RemoveCachedBodyFilterAdaptCachedBodyGlobalFilterNettyWriteResponseFilterForwardPathFilterRouteToRequestUrlFilterWebSocketRoutingFilterNettyRoutingFilterForwardRoutingFilterDispatcherHandler 是什么&#xff1f;⭐如何确定最后的路由路径&#xff1f;下…

一文拿捏Spring之AOP

Spring 1.Spring的理解 1.狭义上 指SpringFramework&#xff0c;特别的控制反转、依赖注入、面向切面、等特性 2.广义上 Spring家族的一系列产品&#xff0c;像SpringMVC、SpringBoot、SpringCloud等 2.aop &#x1f31f;面试题(aop): 简单介绍一下AOP&#xff1f; aop…

【userfaultfd】2021强网杯notebook

程序分析 老规矩&#xff0c;看下启动脚本 开启了 smep、smap、kaslr 保护&#xff0c;当然 kvm64 默认开启 kpti 保护 文件系统初始化脚本 #!/bin/sh /bin/mount -t devtmpfs devtmpfs /dev chown root:tty /dev/console chown root:tty /dev/ptmx chown root:tty /dev/tty…

SAAJ:SOAP with Attachments API for Java

介绍 支持带附件的SOAP消息Java接口&#xff08;SAAJ&#xff1a;SOAP with Attachments API for Java&#xff09;&#xff0c;定义了一套API&#xff0c;使开发者可以产生、消费遵从SOAP 1.1, SOAP 1.2, 和SOAP Attachments Feature的消息。 2019年SAAJ更改为新的名字&…

MIP精确算法的关键——确定界

目录 1.界是什么&#xff1f; 2. 如何更新上下界 2.1 以分支定界为框架的一系列算法 2.2 benders分解 MIP精确算法包含&#xff0c;分支定界、分支切割、分支定价还有benders分解等等。前者是以分支定界为框架的一类算法&#xff1b;后者是以分解为框架的一类算法。甚至还包…

Springboot学习笔记——1

Springboot学习笔记——1 一、快速上手Springboot1.1、Springboot入门程序开发1.1.1、IDEA创建Springboot项目1.1.2、官网创建Springboot项目1.1.3、阿里云创建Springboot项目1.1.4、手工制作Springboot项目 1.2、隐藏文件或文件夹1.3、入门案例解析1.3.1、parent1.3.2、starte…