CodeTON Round 6 (Div. 1 + Div. 2, Rated, Prizes!)

2023-09-22 13:12:50

A.MEXanized Array

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=210;
int a[N];
int n,k,x;
void solve() {
    cin>>n>>k>>x;
    if(x<k-1) {
        cout<<-1<<endl;
        return;
    }
    if(n<k) {
        cout<<-1<<endl;
        return;
    }
    for(int i=0; i<k; i++) {
        a[i]=i;
    }
    if(x==k) {
        for(int i=k; i<n; i++) {
            a[i]=k-1;
        }
    }
    else{
        for(int i=k;i<n;i++){
            a[i]=x;
        }
    }
//    for(int i=0;i<n;i++) cout<<a[i]<<' ';
//    cout<<endl;
    int sum=0;
    for(int i=0;i<n;i++) sum+=a[i];
    cout<<sum<<endl;
}
int main() {
    int t=1;
    cin>>t;
    while(t--) {
        solve();
    }
    return 0;
}

B.Friendly Arrays

异或==>按位异或,看其二进制每一位

二进制每一位要么为0,要么为1

如果要最大的话,我们尽可能让原本为1的继续保持为1,让原本为0的变成1

如果要最小的话,我们尽可能让原本为0的继续保持为0,让原本为1的变成0

现在可以让每一个a[i]或上b[j],b[j]可以任意选,由于是或,所以只要某一个b[j]某一位上是1,那么a[1]到a[n]的这一位必定为1,那么最后将a[1]到a[n]异或起来,那么这一位的结果就是n个1异或

当n为奇数的时候,这一位就为1,那么这一位只会不变或者增大(只有01两种情况),所以我们需要更多的位都能为1,所以或上所有的b[j],因为当b[j]某一位为0时,由于是或,所以对结果没影响,当某一位为1时,那么最后所有a[i]异或得到的结果的该位肯定是1,这样得到的值就是最大的,一个b[j]都不或得到的结果就是最小的

当n为偶数的时候,这一位为0,那么这一位只会不变或减小,所以如果要求最小值的话,那么就或上所有的b[j],要求最大值的话,那么就一个b[j]或

由此,最终最大值和最小值只在两种情况中取到,即对于每一个a[i],或上所有的b[j],然后全部的a[i]异或起来和对于每一个a[i],一个b[j]也不或上,然后全部的a[i]异或起来

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#define endl '\n'
using namespace std;
const int N=2e5+10;
int a[N],b[N];
int n,m;
void solve() {
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i];
    int tmp=0;
    for(int i=1;i<=m;i++){
        cin>>b[i];
        tmp|=b[i];
    }
    int x=0,y=0;
    for(int i=1;i<=n;i++){
        x^=a[i];
        y^=(a[i]|tmp);
    }
    if(x>y) swap(x,y);
    cout<<x<<' '<<y<<endl;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int t=1;
    cin>>t;
    while(t--) {
        solve();
    }
    return 0;
}

C.Colorful Table

可以发现,二维数组b是关于y=x对称的,包含所有数字x的矩形一定是一个正方形

包含小数字的正方形一定包含大数字的正方形

只要从大到小枚举颜色,找到它的最小下标以及最大下标,然后以最小下标和最大小标作为一条边组成的正方形即为包含该数字的正方形

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#define endl '\n'
//#define int long long
using namespace std;
int n,k;
void solve() {
    cin>>n>>k;
    vector<vector<int>>e(k+1);
    vector<int>ans(k+1);
    for(int i=1;i<=n;i++) {
        int x;
        cin>>x;
        e[x].push_back(i);
    }
    int t1=2e9,t2=0;
    for(int i=k;i>=1;i--){
        if(e[i].size()==0) continue;
        for(auto v:e[i]){
            t1=min(t1,v);
            t2=max(t2,v);
        }
        ans[i]=2*(t2-t1+1);
    }
    for(int i=1;i<=k;i++) cout<<ans[i]<<' ';
    cout<<endl;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t=1;
    cin>>t;
    while(t--) {
        solve();
    }
    return 0;
}

D.Prefix Purchase

原本思路:

 

 

代码: 

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#define endl '\n'
//#define int long long
using namespace std;
const int N=2e5+10;
int a[N];
int n,k;
void solve() {
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    cin>>k;
    int maxn=0;
    int maxi=0;
    for(int i=1;i<=n;i++){
        int x=k/a[i];
        if(x>=maxn){
            maxn=x;
            maxi=i;
        }
    }
    if(k%a[maxi]==0){
        for(int i=1;i<=maxi;i++) cout<<maxn<<' ';
        for(int i=maxi+1;i<=n;i++) cout<<0<<' ';
        cout<<endl;
    }
    else{
        int idx=maxi;
        for(int i=maxi+1;i<=n;i++){
            if(a[maxi]+k%a[maxi]>=a[i]) idx=i;
        }
        for(int i=1;i<=maxi;i++) cout<<maxn<<' ';
        for(int i=maxi+1;i<=idx;i++) cout<<1<<' ';
        for(int i=idx+1;i<=n;i++) cout<<0<<' ';
        cout<<endl;
    }
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t=1;
    cin>>t;
    while(t--) {
        solve();
    }
    return 0;
}

发现有一个明显的问题:最后可能分出去的m*a[maxi]+k%a[maxi]中m可能不是1,那么该思路崩盘了

参考CodeTON Round 6 (Div. 1 + Div. 2, Rated, Prizes!) (A-D)_happychaoss的博客-CSDN博客

贪心

 AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#define endl '\n'
#define int long long
using namespace std;
const int N=2e5+10;
int a[N];
int n,k;
void solve() {
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    cin>>k;
    //维护后缀最小值
    for(int i=n-1;i>=1;i--) a[i]=min(a[i],a[i+1]);
    vector<int>ans(n+1,0);
    ans[1]=k/a[1];
    int left=k-ans[1]*a[1];//剩下的硬币的数量
    int cnt=k/a[1];//加的次数
    for(int i=2;i<=n;i++){
        int diff=a[i]-a[i-1];
        if(diff==0) ans[i]=ans[i-1];
        else{
            cnt=min(cnt,left/diff);
            left-=cnt*diff;
            ans[i]=cnt;
            if(cnt==0) break;
        }
    }
    for(int i=1;i<=n;i++) cout<<ans[i]<<' ';
    cout<<endl;
}
signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t=1;
    cin>>t;
    while(t--) {
        solve();
    }
    return 0;
}
更多推荐

记RestTemplateBuilder奇诡的坑

前言在紧张的开发工作中,总能遇到一些奇怪的问题。今天的主角是RestTemplateBuilder。问题描述由于某些原因,我需要一个不检查HTTPS证书的RestTemplate。但是不管我怎么搞,就是依然会被检查到证书而抛出请求异常!在构建RestTemplate时,我使用了RestTemplateBuilder.(

央媒发稿不能改?媒体发布新闻稿有哪些注意点

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。“央媒发稿不能改”是媒体行业和新闻传播领域的普遍理解。央媒,即中央主要媒体,是权威性的新闻源,当这些媒体发布新闻稿或报道时,其他省、市或地方的媒体在转载时一般不对原文内容进行修改,以保证信息的一致性和权威性。其次,在我们给央媒提供新闻稿件时,需要注意以下细节,因为央

logsim&worldsim&场景库

logsimLogsim是由路测数据提取的场景,提供复杂多变的障碍物行为和交通状况,使场景充满不确定性。简单理解就是路测时录制log,通过平台回放log实现场景重现。Logsim数据来源于真实的路测,是最真实,正确有效的。但是Logsim数据的内容通常无法根据需求进行更改。举个例子,比如路测的时候,有一些需要人工接管的

【教程】微信小程序导入外部字体详细流程

前言在微信小程序中,我们在wxss文件中通过font-family这一CSS属性来设置文本的字体,并且微信小程序有自身支持的内置字体,可以通过代码提示查看微信小程序支持字体:这些字体具体是什么样式可以参考:微信小程序--字体展示_别动我的指针的博客-CSDN博客字体一font-family:‘CourierNew’,C

PgSQL-安全加固实践-如何设置非全零监听

PgSQL-安全加固实践-如何设置非全零监听1、介绍PgSQL在启动前需要配置listen_addresses配置项,该配置项表示允许PgSQL服务监听程序绑定的IP。我们知道一个host上可以有多个网卡,每个网卡可以绑定多个IP,该参数就是控制PgSQL服务绑定在哪个或者哪几个IP上。即控制服务使用哪个网络接口进行监

【笔试强训选择题】Day43.习题(错题)解析

作者简介:大家好,我是未央;博客首页:未央.303系列专栏:笔试强训选择题每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!!文章目录前言一、Day43习题(错题)解析总结前言一、Day43习题(错题)解析1.解析:B题目解析:知识点解析:synflood攻击:synflood攻击又叫syn泛洪攻击;有一

【HCIE】07.MPLS VPN单域

MPLSVPN典型应基本组网IntranetVPN1和VPN1一对,VPN2和VPN2是一对ExtranetVPN1和VPN2都能与VPN1建立连接,VPN1与VPN2之间不能建立连接Hub&SpokeMCE组网多CE组网PE是运营商设备,CE是用户侧设备,如果CE较多,那么运营商需要建很多PE和链路,投入成本较大CE

美联储如期暂停加息,非连续性加息或成常态?

KlipC报道:9月21日凌晨,美联储如期暂停加息。KlipC的合伙人AndiD表示:“”美联储在结束货币政策会议后宣布。维持当前5.25%至5.50%的联邦基金利率目标区间不变,保持在22年来最高点,这也是美联储本轮加息周期第二次按下“暂停键”。上一次是今年6月的货币政策会议。D先生指出9月议息会议联储并未继续加息,

Leetcode | 303.区域和检索-数组不可变

303.区域和检索-数组不可变欢迎关注公众号“三戒纪元”题目给定一个整数数组nums,处理以下类型的多个查询:计算索引left和right(包含left和right)之间的nums元素的和,其中left<=right实现NumArray类:NumArray(int[]nums)使用数组nums初始化对象intsumRa

C++【个人笔记1】

1.C++的初识1.1简单入门#include<iostream>usingnamespacestd;intmain(){cout<<"helloworld"<<endl;return0;}#include<iostream>;预编译指令,引入头文件iostream.usingnamespacestd;使用标准命名空间

聊聊自动化测试路上会遇到的挑战~

一、测试范围无论是功能测试,还是自动化或者性能测试,第一步要做的,是明确测试范围和需求指标。对于自动化测试来说,特别是UI自动化,并不是所有的功能点都适合做UI自动化。根据具体的业务情况和项目稳定程度,选择UI自动化+API自动化结合,选择合适的业务点来进行针对性的自动化测试方案设计,才是最佳方案。①、使用频次较高,异

热文推荐