当前位置: 首页 > news >正文

【学习】Codeforces Round 861 (Div. 2) C. Unlucky Numbers

题意:给出两个数l,r,要求在这个闭区间【l,r】的所有数中,找出一个要求数,要求数的要求是从这个数中选出所有位中最大的数字和最小的数字,让他们的差值最小,问这个是谁,如果有多个输出其中一个,tips:123【3-1】比121【2-1】大.

思路:

1.这道题可能很容易上来想到数位dp(当然好像确实有这种做法,但我不是),但其实你会发现它用数位dp很难解决(可能是我学艺不精),但是换一个思路,既然要求极差最小,那肯定代表有个答案肯定有个固定的最大最小值,那么如果我暴力枚举一个数字能出现的最大和最小,试图将它构造出来并符合在l,r内,那不就是答案吗?

2.所以枚举一个可能的数字的出现的最大值和最小值,接下来check判断这个数字能不能被构造就可以了。从高位到低位填,如果对当前这一位填上后,后面都填能填的最小数字,结果还比区间的r大,那是不是绝对不可能构造出来,相应的,如果都填最大还没有l大,那一样代表这个数字不可能构造出来。最后返回结果就可以了。

代码:   参考了Codeforces 861 Div2 C. Unlucky Numbers - 知乎

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define int128 __int128
#define endl '\n'
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
const int N = 2e5+10;
const int INF = 1e18;
const int MOD = 998244353;

int len,L,R;

int check(int r,int l){
	
	int now=0;
	
	for(int i=0;i<len;i++){
		int f=-1;
		for(int j=r;j>=l;j--){
			int temp=now*10+j;
			for(int k=i+1;k<len;k++){
				temp=temp*10+l;
			}
			if(temp>R){
				continue;
			}
			temp=now*10+j;
			for(int k=i+1;k<len;k++){
				temp=temp*10+r;
			}
			if(temp<L){
				return -1;
			}
			f=j;
			break;
		}
		if(f!=-1)
			now=now*10+f;
		else return -1;
		
	}
	
	return now;
	
}

void solve(){
	string x,y;
	cin >> x >> y;
	
	len=x.size();
	L=stoll(x);
	R=stoll(y);
	
	int ans=20,res=-1;
	
	for(int l=9;l>=0;l--){
		for(int r=0;r<=l;r++){
			int ned=check(l,r);
			if(ned!=-1 && l-r<ans){
				ans=l-r;
				res=ned;
			}
		}
	}
	
	cout << res << endl;
	
}

signed main(){
	IOS;
	
	int t=1;
	cin >> t;
	while(t--){
		solve();
	}
}

跟队友一起看了这道,但是他们居然都认死是数位dp……确实很像数位dp,其实想到了只要枚举就好了,不过没敲代码,刚好学习一下别人优美的代码吧

相关文章:

  • leecode Hot100之回溯算法【C++速查】
  • 【Linux】进程的详讲(下)--进程的环境变量
  • 高边MOSFET(High-Side MOSFET)
  • Python Path对象symlink_to方法介绍
  • 文本纠错WPS插件:提升文档质量的利器
  • 关于 CSDN的C知道功能模块 的详细解析,包括 新增的AI搜索(可选深度思考) 和 智能体功能 的具体说明及对比分析
  • 实验三 多表查询和子查询
  • js的es6模块中 暴露的使用方法简介
  • 鸿蒙开发01
  • 三周年创作纪念日
  • WinForm真入门(15)——NumericUpDown控件详解
  • 《灵活的接口设计:如何支持多种后端数据存取实现》
  • Java 在人工智能领域的突围:从企业级架构到边缘计算的技术革新
  • 软考高级系统架构设计师-第11章 系统架构设计
  • c# AI编程助手 — Fitten Code
  • 分布式微服务系统架构第106集:jt808,补充类加载器
  • 车载软件架构 ---单个ECU的AUTOSAR开发流程
  • 如何通过技术手段降低开发成本
  • c语言jni实战,双系统
  • springboot和springcloud的区别
  • 耐克领跑女性运动市场:持续加码、创新,更多新增长点有望涌现
  • 新片|真人版《星际宝贝史迪奇》5月23日与北美同步上映
  • 关税飓风下的跨境电商人:已度过焦虑期,和中国做生意是美国最优解
  • 在因关税战爆火的敦煌网上,美国人爱买什么中国商品
  • 平均25岁,天津茱莉亚管弦乐团进京上演青春版《春之祭》
  • 最高法报告点名“夜郎古酒”商标侵权案:促成当事人握手言和