Day1 CF847 div3 vp A-E

news2024/9/24 13:14:10

Dashboard - Codeforces Round #847 (Div. 3) - Codeforces

感觉想试试隔一天vp一场div3/4,那就试试吧

本来想把F补完再写的,但是感觉有点晚了,那就将就一下吧,F有缘单独补,嘻

今晚浅浅vp了一下,一鼓作气地打出了newbie水平,乐

龟速签到,只能说不愧是我,以后签到还是靠队友算了

D题还写了个模拟,爆T,鉴定为低能,其实只需要算算贡献就好了

A. Polycarp and the Day of Pi

模拟

题意:

给定一个字符串,问和圆周率的最长匹配是多长

思路:

模拟就好了

通过这个签到,让我认识到C++里pi咋写的:

const double pi = acos(-1.0);

应该就我不知道了吧

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mxn=1e2+10;
string s;
string s2="3141592653589793238462643383279";
void solve(){
    s.clear();
    cin>>s;
    int ansi=0;
    for(int i=0;i<=30;i++){
        if(s[i]!=s2[i]){
            ansi=i;
            break;
        }
    }
    cout<<ansi<<'\n';
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;cin>>__;
    while(__--)solve();return 0;
}

B. Taisia and Dice

纯构造

题意:

给定n,s,r,n是数列长度,s是所有数之和,r是除了最大值的所有数之和,让你构造一个这样的数列

思路:

这样就相当于把最大值告诉你了,然后让你构造剩下的n-1个数

构造,那就让它特殊化

第一个放最大值,然后后面让它平均分配

(感觉这种构造不是平均分配就是集中在一处)

那我选择平均分配,即把r平均分配到n-1个地方

那显然不一定能平均分配,就让它下取整然后分配剩下的1就好了

这种写法值得一学,感觉很妙!

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mxn=1e2+10;
int n,s,r;
void solve(){
    cin>>n>>s>>r;
    vector<int> v(n+1);
    v[0]=s-r;
    int x=r%(n-1),k=r/(n-1);
    for(int i=1;i<n;i++){
        if(i<=x) v[i]=k+1;
        else v[i]=k;
    }
    for(int i=0;i<n;i++) cout<<v[i]<<" \n"[i==n-1];
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;cin>>__;
    while(__--)solve();return 0;
}

C. Premutation

(拓扑排序板子题)

题意:

一个长度为 n 的排列,将 n个这样的排列每个去掉一位然后打乱。根据打乱后的排列求出原排列。

思路:

纯纯拓扑排序板子题,本来不敢写,结果看到数据范围这么小就试着写了一发,一交真的过了,乐,有种abc的美

Code:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mxn=1e6+10,mxe=1e6+10;
struct ty{
    int to,next;
}edge[mxe<<1];
vector<int> ans;
queue<int> q;
int n,x,tot=0;
int head[mxn],in[mxn];
void add(int u,int v){
    edge[tot].to=v;
    edge[tot].next=head[u];
    head[u]=tot++;
}
void init(){
    ans.clear();
    tot=0;
    for(int i=0;i<=n;i++){
        in[i]=0;
        head[i]=-1;
    }
}
void topsort(){
    for(int i=1;i<=n;i++){
        if(!in[i]) q.push(i);
    }
    while(!q.empty()){
        int u=q.front();
        q.pop();
        ans.push_back(u);
        for(int i=head[u];~i;i=edge[i].next){
            in[edge[i].to]--;
            if(!in[edge[i].to]){
                q.push(edge[i].to);
            }
        }
    }
}
void solve(){
    cin>>n;
    init();
    for(int i=1;i<=n;i++){
        vector<int> v;
        v.push_back(0);
        map<pair<int,int>,int > mp;
        for(int j=1;j<=n-1;j++) cin>>x,v.push_back(x);
        for(int j=1;j<=n-1;j++){
            for(int k=j+1;k<=n-1;k++){
                if(!mp.count({v[k],v[j]})) add(v[k],v[j]),in[v[j]]++,mp[{v[k],v[j]}]++;
            }
        }
    }
    topsort();
    reverse(ans.begin(),ans.end());
    for(int i=0;i<ans.size();i++) cout<<ans[i]<<" \n"[i==ans.size()-1];
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;cin>>__;
    while(__--)solve();return 0;
}

D. Matryoshkas

贪心(直接计算贡献!)

题意:

给定一个集合,将该集合分成若干个由连续正整数组成的集合,求分成集合的数量的最小值。

思路:

这道题,一开始看起来很神秘啊,感觉就是要不贪心要不dp,div3D怎么可能dp,那肯定就是贪了

然后想了很久这怎么贪,肯定就是每次取最长连续的然后拿走,问要拿几次

然后难道是暴力吗,然后我就真的写了发暴力:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mxn=1e6+10,mxe=1e6+10;
map<int,int> mp;
int n;
int a[mxn];
void solve(){
    mp.clear();
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i],mp[a[i]]++;
    int cnt=n,ans=0;
    while(cnt>=1){
        ans++;
        int ansi;
        auto it=mp.begin();
        while(it!=mp.end()){
            if(it->second!=0){
                ansi=it->first;
                break;
            }
            it++;
        }
        for(int i=ansi;;i++){
            if(mp[i]>=1) mp[i]--,cnt--;
            else break;
        }
    }
    cout<<ans<<'\n';
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;cin>>__;
    while(__--)solve();return 0;
}

然后果不其然T15了,好死捏

其实这个暴力,我写了好久,就是对map用法不熟悉

通过这道题可以学学怎么用map!

其实这道题就是直接计算贡献,完全不需要模拟

据说这里用umap会被hack,我的评价是狗都不用

在考虑贪心的时候,直接计算贡献就好了!

Code:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mxn=1e6+10,mxe=1e6+10;
int n;
void solve(){
    cin>>n;
    vector<int> v(n+1);
    map<int,int> mp;
    for(int i=1;i<=n;i++) cin>>v[i],mp[v[i]]++;
    int last_x=-1,last_y=-1;
    int ans=0;
    for(auto [x,y]:mp){
        if(x!=last_x+1) last_y=0;
        ans+=max(0ll,y-last_y);
        last_x=x;
        last_y=y;
    }
    cout<<ans<<'\n';
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;cin>>__;
    while(__--)solve();return 0;
}

E. Vlad and a Pair of Numbers

bitmask+构造

题意:

思路:

喜闻乐见的bitmask+构造

bitmask嘛,那就去考虑二进制位

因为是在二进制位里构造,那么特殊一点,把所有异或的其中那个1挪到a,这样对答案没影响

然后去考虑限制条件

二进制里相加会进位,然后/2就是右移1位

因为两者相等,那么在a=1,b=0这一对右边,一定是a=1,b=1,这样才满足

为什么呢,这样右边相加后进两位,1就会跑到a=1,b=0这一对的左边了,然后/2右移一下,就刚好相等了

这个其实观察样例也能得出来

不存在的情况就是,x有相邻的1或第0位是1,这个看样例也能得出来

bitmask的样例很重要!要记得观察!

然后就能构造出来了

Code:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mxn=1e6+10,mxe=1e6+10;
int x;
void solve(){
    int a=0,b=0;
    cin>>x;
    if(x&1){
        cout<<-1<<'\n';
        return;
    }
    for(int j=30;j>=0;j--){
        if(((x>>j)&1)==1 && ((x>>(j-1))&1)==1){
            cout<<-1<<'\n';
            return;
        } 
    }
    for(int j=30;j>=0;j--){
        if((x>>j)&1){
            a|=(1<<j);
            a|=(1<<(j-1));
            b|=(1<<(j-1));
        }
    }
    cout<<a<<" "<<b<<'\n';
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int __=1;cin>>__;
    while(__--)solve();return 0;
}

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

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

相关文章

聊聊如何利用apollo与druid整合实现数据源动态热切

前言 本文的素材来源与某次和朋友技术交流&#xff0c;当时朋友就跟我吐槽说apollo不如nacos好用&#xff0c;而且他们还因为apollo发生过一次线上事故。 故事的背景大概是如下 前阵子朋友部门的数据库发生宕机&#xff0c;导致业务无法正常操作&#xff0c;当时朋友他们数据…

【JavaEE进阶】锁的特性

目录 一、乐观锁&悲观锁 二、公平锁&非公平锁 三、可重入锁&非可重入锁 四、读写锁&互斥锁 互斥锁 读写锁 读写锁涉及的类:ReentrantReadWriteLock 读写锁的优势: 五、轻量级锁&重量级锁 六、CAS ①基于CAS实现原子类 下面&#xff0c;来一段CAS的伪…

举个栗子~Tableau 技巧(250):创建 KPI 指标突出显示表

上一个栗子发出后&#xff0c;有数据粉反馈&#xff1a;有什么办法可以让全年的销售数据分层显示哇&#xff1f;业绩表现好、一般和差的分别使用不同的底色。 这个需求&#xff0c;如果考核的是名次&#xff0c;可以使用 &#x1f330; 用颜色突出显示前N项(TopN)和后N项(Bott…

samba设置文件共享

前提说明本人使用的系统如下共享文件的系统&#xff1a;ubuntu 版本&#xff1a;18.04.6目标系统&#xff1a;windows11安装sambasudo apt-get install samba修改配置文件sudo vim /etc/samba/smb.conf文件末尾添加以下内容[share] # 共享的名称&#xff0c;可以自行定义 c…

完整数据分析流程:Python中的Pandas如何解决业务问题

开篇 作为万金油式的胶水语言&#xff0c;Python几乎无所不能&#xff0c;在数据科学领域的作用更是不可取代。数据分析硬实力中&#xff0c;Python是一个非常值得投入学习的工具。 这其中&#xff0c;数据分析师用得最多的模块非Pandas莫属&#xff0c;如果你已经在接触它了…

c#入门-异步方法

异步方法 如果一个操作会返回Task&#xff0c;那么用这个操作续接后续操作&#xff0c;也会得到Task。 也就是说Task具有传染性&#xff0c;最终拼凑出来的Task非常复杂。 使用异步方法&#xff0c;可以简化Task的拼凑。 async修饰 异步方法需要添加async修饰符。并且通常方…

【前端】Vue项目:旅游App-(15)home:网络请求house数据、动态并组件化展示house列表信息

文章目录目标过程与代码content组件请求数据&#xff1a;houseListrequeststore控制台输出动态加载更多列表数据house-item组件阶段1&#xff1a;数据传送阶段2&#xff1a;对着目标写样式house-item-v9house-item-v9&#xff1a;debughouse-item-v3阶段3&#xff1a;总体效果效…

Android ANR触发机制(二)

上一篇文章看了Service的ANR触发流程&#xff0c;现在看一下其他三种ANR触发流程。 1.BroadcastReceiver触发ANR BroadcastReceiver超时是位于ActivityManager线程中的BroadcastQueue.BroadcastHandler收到BROADCAST_TIMEOUT_MSG消息时触发。 广播队列分为foreground队列和b…

基于Java+SpringBoot+Vue前后端分离学生管理系统设计与实现

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌ 博主作品&#xff1a;《微服务实战》专栏是本人的实战经验总结&#xff0c;《Spring家族及…

2023年二月份图形化二级打卡试题

活动时间 从2023年 2月1日至1月21日&#xff0c;每天一道编程题。 本次打卡的规则如下&#xff1a; &#xff08;1&#xff09;小朋友每天利用10~15分钟做一道编程题&#xff0c;遇到问题就来群内讨论&#xff0c;我来给大家答疑。 &#xff08;2&#xff09;小朋友做完题目后&…

数组中和为0的三个数

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意: 答案中不可以包含重复的三元组。 示例 1: 输入: num…

了解SLI、SLO和SLA

了解SLI、SLO和SLA 概念解释 服务水平指标(SLI) SLI代表目前服务的状态&#xff0c;例如可以是最基本的接口成功率、p99响应时间&#xff0c;也可以是一些业务指标&#xff0c;例如用户投诉率之类的。是可量化&#xff0c;是可确定的。 服务水平目标(SLO) SLO是目标&#x…

【树】哈夫曼树和哈夫曼编码

哈夫曼&#xff08;Huffman&#xff09;树&#xff0c;又称最优树&#xff0c;是一类带权路径长度最短的树。最优二叉树&#xff08;哈夫曼树&#xff09;路径&#xff1a;从树中一个结点到另一个结点之间的分支构成这两个结点之间的路。路径长度:路径上的分支数目&#xff1b;…

mysql分组排序取组内第一的数据行获取分组后,组内排名第一或最后的数据行。

前言&#xff1a; group by函数后取到的是分组中的第一条数据&#xff0c;但是我们有时候需要取出各分组的最新一条&#xff0c;该怎么实现呢&#xff1f; 本文提供两种实现方式。 一、准备数据 DROP TABLE IF EXISTS tb_dept; CREATE TABLE tb_dept (id bigint(20) UNSIG…

chat聊天系统消息消费时遇到的问题及优化思路

前言 之前有段工作经历涉及到了chat相关&#xff0c;而消息的发送 -> 存储 -> 消费是由不同的团队负责的&#xff0c;因此消息如何再多个团队之间流通、以及通过什么介质传递都是需要考虑的问题。 之前我负责过一些消息消费的相关工作&#xff0c;消息发送团队将消息推…

【Linux】简介磁盘|inode|动静态库

目录一.简介磁盘1.磁盘的物理结构&#xff1a;2.磁盘存储方式&#xff1a;3.磁盘的逻辑抽象&#xff1a;二.inode&&文件系统1.inode文件属性&#xff08;inode&#xff09;内容&#xff08;data block&#xff09;为什么删除一个文件相比于写一个文件要快得多&#xff…

若依配置教程(二)集成积木报表JimuReport

积木报表配置官网 在搭建好若依环境成功运行以后&#xff0c;我们先在这个系统中加一个小功能&#xff1a;JimuReport积木报表&#xff0c;以下步骤&#xff0c;我们按照官网教程&#xff0c;详细配置一下&#xff1a; 1.在ruoyi-admin文件夹下的pom.xml加入jar包依赖&#x…

MLP多层感知机理解

目录 .1简介 .2例子 2.1模型 2.2 实例 2.2.1 问题描述 2.2.2 数学过程 .3 代码 3.1 问题描述 3.2 代码 references&#xff1a; .1简介 多层感知机是全连接的 可以把低维的向量映射到高维度 MLP整个模型就是这样子的&#xff0c;上面说的这个三层的MLP用公式总结起来…

C 语言零基础入门教程(二十)

C 预处理器 C 预处理器不是编译器的组成部分&#xff0c;但是它是编译过程中一个单独的步骤。简言之&#xff0c;C 预处理器只不过是一个文本替换工具而已&#xff0c;它们会指示编译器在实际编译之前完成所需的预处理。我们将把 C 预处理器&#xff08;C Preprocessor&#x…

练手好福利!20个Python实战项目含源代码【2023最新】

高效学习源代码的步骤&#xff1a;1.运行程序&#xff0c;观察表现2.运行源码&#xff0c;断点调试&#xff0c;从头跟一边源码的执行流程&#xff0c;注意函数堆栈3.画类图、流程图&#xff0c;先把遇到的重要类记录下来&#xff0c;表明各个类的关系4.记录问题&#xff0c;把…