【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 我太难了. 好了,废话不多说了,下面正式提接: 这 ...
随机推荐
- nginx浏览器开启密码验证
如果我们在 nginx 下搭建了一些站点,但是由于站点内容或者流量的关系,我们并不想让所有人都能正常访问,那么我们可以设置访问认证.只有让用户输入正确的用户名和密码才能正常访问.效果如下: 在 ngi ...
- Ubuntu 安装 QtCreator (version : Qt 5.9.8)
平台 :Ubuntu 16.04 QT :5.9.8 (open source) 首先去QT安装包下载安装包,为了保持与arm板子的统一,本人选择了 5.9.8 版本的QT 可 ...
- javascript 仿jQuery的无new构造函数
/* 匿名函数 传入 window 值全局变量成为局部变量 */ (function(window,undefined) { /* 申明一个名为jQuery 的函数*/ function jQuery ...
- python经典小程序集锦(一) 实现九九乘法表
本篇文章主要是收集整理一些小程序以供大家娱乐,或者是在面试的时候使用到.文章会持续更新,希望大家收藏关注哦. 1.代码实现过程 for i in range(1, 10): for j in rang ...
- servlet报错“严重: Allocate exception for servlet 类名java.lang.ClassNotFoundException: 路径. 类名”可能原因
1.WEB-INF下web.xml中<servlet-class>路径错误,正确路径为 <servlet-class>包名.类名</servlet-class> 2 ...
- SqlServer学习之存储过程
前言:对于存储过程一直有一种抵触的心理,因为毕业至今所在的公司开发组都不是很规范,对于开发的一些注意事项并没有很多的规定,只是在知乎上查找相关知识的时候,看到很多人对于在程序里使用存储过程的不好之处都 ...
- .net core默认不支持gb2312
采集数据时,乱码,之前遇到过这个情况,于是老办法: 果断使用Encoding.GetEncoding(“GB2312”),抛异常.搜了下,是因为.net core默认不支持gb2312 所以,两个办法 ...
- 安卓开发之HttpURLConnection类和Handler类的使用
package com.lidaochen.test; import java.io.ByteArrayOutputStream; import java.io.InputStream; public ...
- Spring之XML解析
XML解析,我们可以通过我们常用的以下代码作为入口 也许,我们习惯使用第一种加载方式,但是以前也存在 第二种加载,并且这两种加载也有差别,下面再来分析. 先分析 第二种 使用 BeanFactory ...
- Java基础加强-内部类及代理
/*内部类是一个编译时的概念,*/ 常规内部类.静态内部类.局部内部类.匿名内部类 1.常规内部类(常规内部类没有static修饰且定义在外部类类体中) 1.常规内部类中的方法可以直接使用外部类的实例 ...