【csp模拟赛1】T1 心有灵犀
【题目描述】
爱玩游戏的小 Z 最近又换了一个新的游戏。这个游戏有点特别,需要两位玩 家心有灵犀通力合作才能拿到高分。 游戏开始时,两位玩家会得到同一个数字 N,假设这个数字共有 t 位数码, 然后两位玩家可以分别对这个数字的 t 位数码进行 K 次交换,但要求每次交换后 得到的数字不能有前导 0,最后游戏得分为两位玩家的最终数字的差的绝对值。 小 Z 想知道,对于给定的数字,最大得分是多少。
【输入格式】
第一行为测试数据组数 T(1≤T≤10)。 每组测试数据仅一行,包含两个整数 N 和 K,含义见题面。
【输出格式】
对于每组数据输出仅一行,包含一个整数,表示最大得分。
【样例输入】
5
12 1
213 2
998244353 1
998244353 2
998244353 3
【样例输出】
9
198
699599970
759599973
764599473
【样例解释】
第一个数据中,变换后可得到 21 与 12,差值是 9; 第二个数据中,变换后可得到 321 与 123,差值是 198; 后三个数据,变换 1/2/3 次分别可得到 998544323 与 298944353,998544332 与 238944359,998544332 与 233944859,差值分别为 699599970,759599973 与 764599473。
思路:
这道题贪心错误,不能直接找后面靠后的比他大的位和他交换,989244343可以hack掉,或者别的数据都可以,直接爆搜,从高位到低位,注意求最小值时要特判前导零 + dfs。
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define INF 999999999
using namespace std; inline int read() {
int x = 0,f = 1; char s = getchar();
while(s < '0' || s > '9') {if(s == '-') f = -1;s = getchar();}
while(s >= '0' && s <= '9') {x = x * 10 + s - '0';s = getchar();}
return x * f;
} int T;
int n,m;
int A,B,tot;
int num[12],cnt;
int a[12],b[12]; inline void dfs_min(int k,int opt) {
if(k <= 0 || opt >= tot) {
int sum = 0;
for(int i = 1;i <= tot;i ++) sum = sum * 10 + a[i];
A = min(A,sum);
return ;
}
if(opt == 1) {
for(int i = opt + 1;i <= tot;i ++)
if(a[i] <= a[opt] && a[i] != 0) {
swap(a[i],a[opt]);
dfs_min(k - 1,opt + 1);
swap(a[i],a[opt]);
} }
else {
for(int i = opt + 1;i <= tot;i ++)
if(a[i] <= a[opt]) {
swap(a[i],a[opt]);
dfs_min(k - 1,opt + 1);
swap(a[i],a[opt]);
}
}
dfs_min(k,opt + 1);
} inline void dfs_max(int k,int opt) {
if(k <= 0 || opt >= tot) {
int sum = 0;
for(int i = 1;i <= tot;i ++) sum = sum * 10 + b[i];
B = max(B,sum);
return ;
}
for(int i = opt + 1;i <= tot;i ++)
if(b[i] >= b[opt]) {
swap(b[i],b[opt]);
dfs_max(k - 1,opt + 1);
swap(b[i],b[opt]);
}
dfs_max(k,opt + 1);
} inline void Work() {
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(num,0,sizeof(num));
cnt = tot = 0;
n = read(),m = read();
A = INF,B = 0;
while(n) num[++ cnt] = n % 10,n /= 10;
for(int i = cnt;i;i --)
a[++ tot] = num[i],b[tot] = num[i];
dfs_min(m,1); dfs_max(m,1);
cout << B - A << endl;;
} int main() {
freopen("cooperate.in","r",stdin);
freopen("cooperate.out","w",stdout); T = read();
while(T --) Work(); fclose(stdin); fclose(stdout);
return 0;
}
【csp模拟赛1】T1 心有灵犀的更多相关文章
- CSP模拟赛游记
		时间:2019.10.5 考试时间:100分钟(连正式考试时间的一半还没有到)题目:由于某些原因不能公开. 由于第一次接触NOIinux系统所以连怎么建文件夹,调字体,如何编译都不知道,考试的前半小时 ... 
- 10-18 noip提高组模拟赛(codecomb)T1倍增[未填]
		T1只想到了找环,> <倍增的思想没有学过,所以看题解看得雨里雾里的(最近真的打算学一下! 题目出的挺好的,觉得noip极有可能出现T1T2T3,所以在此mark 刚开始T1以为是模拟,还 ... 
- CSP模拟赛2游记
		这次由于有课迟到30min,了所以只考了70min. 调linux配置调了5min,只剩下65min了. T1:有点像标题统计,但要比他坑一点,而且我就被坑了,写了一个for(int i=1;i< ... 
- 【CSP模拟赛】Freda的迷宫(桥)
		题目描述 Freda是一个迷宫爱好者,她利用业余时间建造了许多迷宫.每个迷宫都是由若干房间和走廊构成的,每条走廊都连接着两个不同的房间,两个房间之间最多只有一条走廊直接相连,走廊都是双向通过. 黄昏 ... 
- 2017.9.23  NOIP2017  金秋杯系列模拟赛 day1 T1
		回形遍历( calc .cpp/c/pas) 时间限制:1s内存 限制: 256MB [问题 描 述] 给出一个 n*m 的棋盘,按如下方式遍历,请问(x,y)往后 z 步走到的是哪个格子. [输入] ... 
- 模拟赛DAY1 T1大美江湖
		这就是一个模拟题,注意1234分别对应左右上下横坐标和纵坐标的判断就好了 题解: 需要注意的是,向上取整ceil函数是对于一个double值返回一个double值,也就是说在ceil里面的类型一定要是 ... 
- 2019/11/12 CSP模拟赛&&考前小总结
		写在前面的总结 离联赛只有几天了,也马上就要回归文化课了. 有点舍不得,感觉自己的水平刚刚有点起色,却又要被抓回文化课教室了,真想在机房再赖几天啊. 像19/11/11那场的简单题,自己还是能敲出一些 ... 
- CSP模拟赛3游记
		老师说这次题比较难,深表同意,还是只有90min. T1有还几个坑点,呜呜呜,感觉有点像斗地主的超级简化版. T2:不难但是特别复杂需要70+行代码,比龙虎斗好想但比较难写,但还是成功打挂. T3:根 ... 
- 6.29模拟赛 (T1:李时珍的皮肤衣 T2:马大嘴的废话 T3:SSY的队列 T4:清理牛棚);
		啊,又是考炸的一天,成功的退步了三名,啊,成共的看错了T1 的题意 ,水了80分. 第十五名就是我,额,已经有点倒数的感觉了,并且一道题都没AC 我太难了. 好了,废话不多说了,下面正式提接: 这 ... 
随机推荐
- Python文件的四种读写方式——r  a    w   r+
			# 文件的基本操作,但是一般不这么使用,因为经常会忘记关闭 password=open("abc.txt",mode="r",encoding="UT ... 
- winForm入门学习
			Windows窗体 属性: name:对象的名称 windowsState:初始化窗体的大小,Normal,Minimized,Maximized StartPosition:窗体起始位置,Manua ... 
- SPOJ-MobileService--线性DP
			题目链接 https://www.luogu.org/problemnew/show/SP703 方法一 分析 很显然可以用一个四维的状态\(f[n][a][b][c]\)表示完成第i个任务时且三人 ... 
- 【Android】二、HelloWorld
			1. 按照该网址写HelloWorld 例子 http://www.runoob.com/android/android-hello-world-example.html 2.点击 make pr ... 
- ASP.NET---如何使用web api创建web服务
			1 首先创建asp.net web空项目,并且创建模拟数据,我在工程下面创建了一个Models文件夹,在文件夹Nodels下面创建类Product和Repository 具体如下: [Serializ ... 
- ECharts简单入门demo
			<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ... 
- 字节流、字符串、16进制字符串转换__java
			package com.dvn.li.main; /** * @Package: * @ClassName:TypeConversion * @Description:字节流.字符串.16进制字符串转 ... 
- S/4HANA中的销售计划管理
			大家好,我所在的S/4HANA Sales(SD)成都研发团队,主要负责S/4HANA里销售模块相关的标准产品研发. 作为产品研发团队,我们遵循SCRUM迭代式增量软件开发过程,以两个星期为一个迭代, ... 
- php的三个常用判断函数
			<?phperror_reporting(E_ERROR);$a;$b = false;$c = '';$d = 0;$e = null;$f = array(); echo 'empty', ... 
- 蓝牙RSSI转距离计算工具
			RSSI是无线接收的信号强度指示,如WIFI.BLE.ZigBee.接收到的RSSI的强弱与发射点与接收点的距离有一定的关系,故可以依据RSSI进行粗略的定位计算,如苹果的iBeacon. 其中用到最 ... 
