Codeforces Round 1004 (Div. 2)(A-E)

news2025/3/14 14:17:49

题目链接:Dashboard - Codeforces Round 1004 (Div. 2) - Codeforces

A. Adjacent Digit Sums

思路

只有两种情况:n+1之后没有进位,y-x=1。n+1之后进位(y-x-1)%9==0。

代码

void solve(){
	int x,y;
	cin>>x>>y;
	if(y-x==1){
		cout<<"YES\n";return;
	}
	int t=x-y+1;
	if(t>=0&&t%9==0){
		cout<<"YES\n";return;
	}
	cout<<"NO\n";
}
signed main() {
	vcoistnt
	int _=1;
	cin>>_;
	while(_--) solve();
	return 0;
}

B. Two Large Bags

思路

设了个1e5没算时间复杂度T了一发。。。。

根据题意的操作,n个x我们可以留下2个分别到两个袋子,n-2个x变成(x+1),一直往下推直到有一个数只有一个那么就不可能得到两个完全相同的袋子,否则则会得到两个相同的袋子

代码

void solve(){
	int n;cin>>n;
	vi a(n+10);
	vi mp(10001,0);
	for(int i=1;i<=n;i++){
		cin>>a[i];
		mp[a[i]]++;
	}
	for(int i=1;i<=10000;i++){
		if(mp[i]>1){
			mp[i+1]+=(mp[i]-2);
		}
		if(mp[i]==1){
			cout<<"NO\n";return;
		}
	}
	cout<<"YES\n";
}
signed main() {
	vcoistnt
	int _=1;
	cin>>_;
	while(_--) solve();
	return 0;
}

C. Devyatkino

思路

原来直接暴力就可以了,,,,,

这题是有一定的规律的,首先出现7答案为0,其他我们发现答案最大是7,只要一直加999...,让最高位从0变成7就行对于所有数(题目给定范围n>=10)都成立,剩下的情况我们对每位数变成7要从两个方面考虑,那就是个位的数和其他,

对于个位数变成7,我们只需要一直加9就可将其变为7

对于其他位上的数为x,如果6>=x>=0,那么我们就能加99...使其进位到7,这还与这位数之后的数的大小有关

如果是x=8,例如8002,我们要先将2给消掉加两个9999,变成28000,再加9999变成37999即可

对于x=9我们发现无论怎么操作其结果是>7的

代码

暴力代码(我求求了建议下次把这个给卡掉哈)

bool check(int x){
	while(x){
		if(x%10==7) return true;
		x/=10;
	}
	return false;
}
void solve(){
	int n;
	cin>>n;
	int cnt=10;
	for(int i=1;i<=10;i++){
		int d=pow(10,i);
		d--;
		int x=n;
		int t=0;
		while(!check(x)){
			t++;
			x+=d;
		}
		cnt=min(cnt,t);
	}
	cout<<cnt<<"\n";
}
signed main() {
	vcoistnt
	int _=1;
	cin>>_;
	while(_--) solve();
	return 0;
}

代码2

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

#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define ull unsigned long long
#define bit __builtin_popcount
#define lowbit(x) ((x)&-(x))
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;

const int N=2e5+10;
const int inf=1e18;
const int mod=998244353;

void solve(){
	string s;
	cin>>s;
	int n=s.size();
	int ans=7;

	auto bol=[&](int st)->int{
		int x=0;
		for(int i=st+1;i<n;i++){
			x*=10;
			x+=(s[i]-'0');
		}
		return x;
	};

	for(int i=0;i<n;i++){
		if(s[i]=='7'){
			ans=0;
		}
	}
	if(s[n-1]=='8') ans=min(ans,1ll);
	if(s[n-1]=='9') ans=min(ans,2ll);
	if(s[n-1]=='0') ans=min(ans,3ll);
	if(s[n-1]=='1') ans=min(ans,4ll);
	if(s[n-1]=='2') ans=min(ans,5ll);
	if(s[n-1]=='3') ans=min(ans,6ll);
	if(s[n-1]=='4') ans=min(ans,7ll);
	if(s[n-1]=='5') ans=min(ans,8ll);

	for(int i=0;i<n-1;i++){
		if(s[i]<='6'&&s[i]>='0'){
			int t=bol(i);
			if(t>=('7'-s[i])){
				ans=min(ans,('7'-s[i])+0ll);
			}else{
				ans=min(ans,('7'-s[i])+1ll);
			}
		}
		if(s[i]=='8'){
			ans=min(ans,bol(i)+1ll);
		}
	}
	cout<<ans<<"\n";
}
signed main() {
	vcoistnt
	int _=1;
	cin>>_;
	while(_--) solve();
	return 0;
}

D. Object Identification

思路

交互题练的还是少了,赛时没做出来

可以发现如果查询结果出现0那么就一定是A,那么怎么询问能够得到这一结果,因为是有向图,我们只需要找到一个不在a中出现的数x,(x,*)查询如果结果是0则A,否则B。如果a是全排列,即所有数都在a中出现,如果是A的话最多有n条边,那么查询出的结果一定是 <n-1 的,那么我们选择查询(1,n)如果结果 >=n-1 则是B,否则是A

总而言之:

如果a不是全排列,查询(x,*)(其中x是不在a中出现的数,*是除x之外[1,n]的所有数),如果结果是0则是A,否则B

如果a是全排列,查询(1,n)如果结果>=n-1则是B,否则是A

代码

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

#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define ull unsigned long long
#define bit __builtin_popcount
#define lowbit(x) ((x)&-(x))
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;

const int N=2e5+10;
const int inf=1e18;
const int mod=998244353;

int query(int a,int b){
	cout<<"? "<<a<<" "<<b<<endl;
	int res;
	cin>>res;
	return res;
}

void solve(){
	int n;
	cin>>n;
	vi a(n+1);
	vb b(n+1);
	for(int i=1;i<=n;i++){
		cin>>a[i];
		b[a[i]]=true;
	}
	for(int i=1;i<=n;i++){
		if(b[i]==false){
            int t=query(i,i==1?2:1);
            if(t==0){
                cout<<"! A"<<endl;
            }else{
                cout<<"! B"<<endl;
            }
            return;
        }
	}
	int x,y;
    for(int i=1;i<=n;i++){
        if(a[i]==1) x=i;
        if(a[i]==n) y=i;
    }
    int t1=query(x,y);
    int t2=query(y,x);
    if(t1!=t2){
        cout<<"! A"<<endl;
        return;
    }
    if(t1>=n-1){
        cout<<"! B"<<endl;
    }else{
        cout<<"! A"<<endl;
    }
}
signed main() {
	vcoistnt
	int _=1;
	cin>>_;
	while(_--) solve();
	return 0;
}

E. White Magic

思路

我们可以发现的结论:没有0的序列一定成立,有两个0的序列一定不成立

那么答案显然是n-cnt0+1或n-cnt0,(cnt0是0的个数)

关于是否能够将一个0添加进去,我们只需要看最左边的0加进去是否成立即可,因为右边的0成立的话,左边的0一定是成立的

代码

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

#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define ull unsigned long long
#define bit __builtin_popcount
#define lowbit(x) ((x)&-(x))
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;

const int N=2e5+10;
const int inf=1e18;
const int mod=998244353;

void solve(){
	int n;
    cin>>n;
    vi a(n+10);
    int cnt0=0;
    map<int,int> mp;

    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(a[i]==0) cnt0++;
        mp[a[i]]++;
    }
    
    if(mp[0]){
        mp[0]=1;
    }else{
        cout<<n<<"\n";return;
    }
    int mex=0;
    while(mp[mex]) mex++;
    int mi=inf;
    for(int i=1;i<=n;i++){
        if(a[i]==0&&!mp[a[i]]) continue;
        mp[a[i]]--;
        if(!mp[a[i]]) mex=min(mex,a[i]);
        mi=min(mi,a[i]);
        if(mi<mex){
            cout<<n-cnt0<<"\n";
            return;
        }
    }
    cout<<n-cnt0+1<<"\n";
}
signed main() {
	vcoistnt
	int _=1;
	cin>>_;
	while(_--) solve();
	return 0;
}

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

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

相关文章

Python使用OpenCV图片去水印多种方案实现

1. 前言 本文为作者学习记录&#xff0c;使用Python结合OpenCV&#xff0c;总结了几种常见的水印去除方式&#xff0c;简单图片去水印效果良好&#xff0c;但是复杂图片有点一言难尽&#xff0c;本文部分代码仅供参考&#xff0c;并不能针对所有水印通用&#xff0c;需要根据具…

基于角色访问控制的UML 表示02

一个用户可以成为很多角色的成员&#xff0c;一个角色可以有许多用户。类似地&#xff0c;一个角色可以有多个权限&#xff0c;同一个权限可以被指派给多个角色。每个会话把一个用户和可能的许多角色联系起来。一个用户在激发他或她所属角色的某些子集时&#xff0c;建立了一个…

CEF132 编译指南 Linux 篇 - 获取 CEF 源代码:源码同步详解(五)

1. 引言 在完成所有必要工具的安装和配置之后&#xff0c;我们来到了整个 CEF 编译流程中至关重要的环节&#xff1a;获取 CEF 源代码。CEF 源码的获取过程需要我们特别关注同步策略和版本管理&#xff0c;以确保获取的代码版本正确且完整。本篇将详细指导你在 Linux 系统上获…

Golang关于结构体组合赋值的问题

现在有一个结构体&#xff0c;其中一个属性组合了另外一个结构体&#xff0c;如下所示&#xff1a; type User struct {Id int64Name stringAge int64UserInfo }type UserInfo struct {Phone stringAddress string }如果要给 User 结构体的 Phone 和 Address 赋值的话&am…

django上传文件

1、settings.py配置 # 静态文件配置 STATIC_URL /static/ STATICFILES_DIRS [BASE_DIR /static, ]上传文件 # 定义一个视图函数&#xff0c;该函数接收一个 request 参数 from django.shortcuts import render # 必备引入 import json from django.views.decorators.http i…

【银河麒麟高级服务器操作系统】服务器卡死后恢复系统日志丢失-分析及处理全过程

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://document.kylinos.cn 服务器环境以及配置 【机型】 处理器&#xff…

通过 VBA 在 Excel 中自动提取拼音首字母

在excel里面把表格里的中文提取拼音大写缩写怎么弄 在Excel中&#xff0c;如果你想提取表格中的中文字符并转换为拼音大写缩写&#xff08;即每个汉字的拼音首字母的大写形式&#xff09;&#xff0c;可以通过以下步骤来实现。这项工作可以分为两个主要部分&#xff1a; 提取拼…

动态规划dp_4

一.背包 如果求组合数就是外层for循环遍历物品&#xff0c;内层for遍历背包。 如果求排列数就是外层for遍历背包&#xff0c;内层for循环遍历物品。 二.题 1. 思路&#xff1a;dp五部曲&#xff0c;思路在注释 /* dp[i]表示&#xff1a;到达第 i 个台阶有dp[i]种方法 状态转…

对贵司需求的PLC触摸的远程调试的解决方案

远程监控技术解决方案 一、需求痛点分析 全球设备运维响应滞后&#xff08;平均故障处理周期>72小时&#xff09;客户定制化需求频繁&#xff08;每月PLC程序修改需求超50次&#xff09;人力成本高企&#xff08;单次跨国差旅成本约$5000&#xff09;多品牌PLC兼容需求&am…

Python用PyMC3马尔可夫链蒙特卡罗MCMC对疾病症状数据贝叶斯推断

全文链接&#xff1a;https://tecdat.cn/?p39937 本文聚焦于马尔可夫链蒙特卡罗&#xff08;MCMC&#xff09;方法在贝叶斯推断中的Python实现。通过介绍MCMC的基础原理、在贝叶斯推断中的应用步骤&#xff0c;展示了其在解决复杂分布采样问题上的强大能力。同时&#xff0c;借…

网络工程师 (39)常见广域网技术

一、HDLC 前言 HDLC&#xff08;High-level Data Link Control&#xff0c;高级数据链路控制&#xff09;是一种面向比特的链路层协议。 &#xff08;一&#xff09;定义与历史背景 HDLC是由国际电信联盟&#xff08;ITU&#xff09;标准化的&#xff0c;它基于IBM公司早期的同…

每日Attention学习23——KAN-Block

模块出处 [SPL 25] [link] [code] KAN See In the Dark 模块名称 Kolmogorov-Arnold Network Block (KAN-Block) 模块作用 用于vision的KAN结构 模块结构 模块代码 import torch import torch.nn as nn import torch.nn.functional as F import mathclass Swish(nn.Module)…

基于Python的Optimal Interpolation (OI) 方法实现

前言 Optimal Interpolation (OI) 方法概述与实现 Optimal Interpolation (OI) 是一种广泛应用于气象学、海洋学等领域的空间数据插值方法。该方法通过结合观测数据与模型预测数据&#xff0c;最小化误差方差&#xff0c;从而实现对空间数据的最优插值。以下是OI方法的一般步骤…

学习数据结构(10)栈和队列下+二叉树(堆)上

1.关于栈和队列的算法题 &#xff08;1&#xff09;用队列实现栈 解法一&#xff1a;&#xff08;参考代码&#xff09; 题目要求实现六个函数&#xff0c;分别是栈初始化&#xff0c;入栈&#xff0c;移除并返回栈顶元素&#xff0c;返回栈顶元素&#xff0c;判空&#xff0…

.NET版Word处理控件Aspose.Words教程:使用 C# 删除 Word 中的空白页

Word 文档中的空白页会使其看起来不专业并扰乱流程。用户会遇到需要删除 Word 中的空白页的情况&#xff0c;但手动删除它们需要时间和精力。在这篇博文中&#xff0c;我们将探讨如何使用 C# 删除 Word 中的空白页。 本文涵盖以下主题&#xff1a; C# 库用于删除 Word 中的空…

《代码随想录》刷题笔记——回溯篇【java实现】

文章目录 组合组合总和 III电话号码的字母组合组合总和组合总和II思路代码实现 分割回文串※思路字符串分割回文串判断效率优化※ 复原 IP 地址优化版本 子集子集 II使用usedArr辅助去重不使用usedArr辅助去重 递增子序列※全排列全排列 II重新安排行程题意代码 N 皇后解数独直…

【JavaEE进阶】验证码案例

目 &#x1f332;实现说明 &#x1f384;Hutool介绍 &#x1f333;准备工作 &#x1f334;约定前后端交互接口 &#x1f6a9;接口定义 &#x1f6a9;实现服务器后端代码 &#x1f6a9;前端代码 &#x1f6a9;整体测试 &#x1f332;实现说明 随着安全性的要求越来越⾼…

Qt Creator 5.0.2 (Community)用久了突然变得很卡

目录 1.现象 2.解决方案 1.现象 很久没有用Qt Creator开发项目了&#xff0c;刚刚结束的项目又是用VS2019开发的&#xff1b;这两天刚好有时间去学习一下Qt&#xff0c;刚好要用Qt Creator&#xff0c;结果一打开就没反应&#xff0c;主界面显示出来要好几分钟&#xff0c;最…

阅读论文笔记《Efficient Estimation of Word Representations in Vector Space》

这篇文章写于2013年&#xff0c;对理解 word2vec 的发展历程挺有帮助。 本文仅适用于 Word2Vect 的复盘 引言 这篇论文致力于探索从海量数据中学习高质量单词向量的技术。当时已发现词向量能保留语义特征&#xff0c;例如 “国王 - 男人 女人≈女王”。论文打算借助该特性&am…

初学PADS使用技巧笔记(也许会继续更新)

操作意图&#xff1a;网上找某个芯片封装又不想自己画&#xff0c;再加上没经验&#xff0c;怎么办&#xff1f; 就以AC-DC芯片PN8036为例&#xff0c;打开嘉立创的的DFM&#xff0c;打开立创商城&#xff0c;输入PN8036&#xff0c;点击数据手册&#xff0c;然后点击直接打开…