csu-2018年11月月赛Round2-div1题解

A(2191):Wells的积木游戏

Description

Wells有一堆N个积木,标号1~N,每个标号只出现一次 由于Wells是手残党,所以每次只能取出一块积木放在积木顶层 现在Wells想知道至少需要操作几次可以把积木堆成从顶至底标号升序 不论什么都很菜的Wells显然不知道怎么做 所以作为人生赢家的你义不容辞的决定帮助可怜的Wells

Input

第一行一个正整数N
接下来N行,从顶至底描述每块积木的标号

Output

输出一行,为最小操作次数

Sample Input

3
3
2
1

Sample Output

2

Hint

样例数据的两次操作(3,2,1)->(2,3,1)->(1,2,3) N<=10^5


题解:

div-1难得的水题,找几个数据看一下就可以发现从最大积木的开始向前找,连续的是有贡献的,比如

2 1 5 3 4 6, 6之前只有5这一个连续数字,所以贡献为2,答案就为6 - 2 = 4

代码:

#include<bits/stdc++.h>
#define maxn 100005
using namespace std;
int a[maxn];
int main() {int n;scanf("%d", &n);int maxx = 0, maxpos;for (int i = 1; i <= n; i++) {scanf("%d", &a[i]);if (a[i] > maxx) {maxx = a[i];maxpos = i;}}int cnt = 1;for (int i = maxpos - 1; i >= 1; i--) {if (a[i] == maxx - 1) {cnt++;maxx -= 1;}}cout << n - cnt;return 0;
}

B(2192):Wells弹键盘

Description

Wells十分羡慕和佩服那些会弹钢琴的人比如子浩君,然而Wells只会弹键盘…… Wells的键盘只有10个键,从1,2,3,……,9,0,如下图所示:

而且作为一个正常人,Wells也有两只手,但是为了显示出自己高超的弹键盘水平,Wells决定每只手只动用一个手指,左手指和右手指,来进行按键操作,初始左右手指分别在5,6两个按键上。每一个单位时间(1s),对于一个手指,Wells可以进行如下操作之一:

  • 按下位于手指位置的按键。
  • 将手指向左或向右移动一格,当然不能移到键盘外面。

必须注意以下几点:

  • 在任意时刻,正常人左手指都必须在右手指的左边,当然右手指就在左手指的右边。
  • 在一个单位时间内,只有一个手指可以按下按键。当然,另一个手指还是可以移动的。

现在,给Wells得到一个高级键盘谱(一个仅含0~9的非空字符串)可以在梦里弹出不输于钢琴的旋律,但强迫症Wells一定要知道高级键盘谱弹奏最少要几秒才能弹完,但Wells数学太差了,所以Wells求助于你,本世纪最优秀的程序yuan之一来帮助他!

Input

输入文件有若干行,每行描述一组数据。 对于每组数据仅一行,一个数字串s。

Output

输出若干行,每行为对应输入数据的答案。

Sample Input

434
56
57

Sample Output

5
2
2

Hint

对于20%的数据,0<=length(s)<=5,且数据组数不超过3组; 对于100%的数据,0<=length(s)<=100,且数据组数不超过100组; 保证数据中间没有空行;


题解:

设dp[i][j][k]为第i个数字左手在j右手在k时的最小秒数。则j或k肯定有一个是当前的数字。先让j为当前数字枚举k转移,再让k为当前数字枚举j转移。从dp[i - 1][l][r]转移过来,要求是l < r且处理左手在当前数字时l到当前数字的距离+弹奏的1(s)不能比r到k的距离要小,处理右手在当前数字时r到当前数字的距离+弹奏的1(s)不能比l到j的距离小。否则另一只手到达不了另一个数字。

最后f[n][a[n]][i]和f[n][i][a[n]]中最小的即为答案

代码:

#include<bits/stdc++.h>
using namespace std;
char s[105];
int f[105][15][15];
int a[105];
int main() {while (scanf("%s", s + 1) != EOF) {int n = strlen(s + 1);for (int i = 0; i <= n; i++) {for (int j = 1; j <= 10; j++) {for (int k = 1; k <= 10; k++) {f[i][j][k] = 0x3f3f3f3f;}}}for (int i = 1; i <= n; i++) {if (s[i] == '0') a[i] = 10;else a[i] = s[i] - '0';}f[0][5][6] = 0;for (int i = 1; i <= n; i++) {for (int j = 1; j < a[i]; j++) {for (int l = 1; l <= 10; l++) {for (int r = l + 1; r <= 10; r++) {int s = abs(r - a[i]) + 1;if (abs(l - j) > s) continue;f[i][j][a[i]] = min(f[i][j][a[i]], f[i - 1][l][r] + s);}}}for (int k = a[i] + 1; k <= 10; k++) {for (int l = 1; l <= 10; l++) {for (int r = l + 1; r <= 10; r++) {int s = abs(l - a[i]) + 1;if (abs(r - k) > s) continue;f[i][a[i]][k] = min(f[i][a[i]][k], f[i - 1][l][r] + s);}}}}int ans = 0x3f3f3f3f;for (int i = 1; i <= 10; i++) {if (a[n] < i)ans = min(f[n][a[n]][i], ans);}for (int i = 1; i <= 10; i++) {if (i < a[n])ans = min(f[n][i][a[n]], ans);}cout << ans << endl;}return 0;
}

C(2195):OR

Description

xrdog有一个有趣的算式

X=(a1ora2ora3or...oraN)∗YX=(a1ora2ora3or...oraN)∗Y

现给定,问有多少组满足上述算式的,形如 (a1,a2,a3...aN,Y)(a1,a2,a3...aN,Y) 的(N+1)元组。

Input

第一行两个整数 X(1<=X<=109)X(1<=X<=109) 和 N(1<=N<=109)N(1<=N<=109)

Output

打印一个整数,表示所求答案,答案对1e9+7取模。

Sample Input

2 2

Sample Output

6

Hint

有以下6个3元组: (2,0,1) (0,2,1) (2,2,1) (1,0,2) (0,1,2) (1,1,2)


题解:

先枚举x的每一个因子,找它的二进制下1的个数,每一个1都有2的n次方 - 1的贡献,因为只要在n位中或出这个1就可以了,方法除去全为0的1种,即为2的n次方 - 1

注意枚举因子从1 到 sqrt(x)

代码:

#include<bits/stdc++.h>
#define p 1000000007
typedef long long ll;
using namespace std;
inline ll fastPow(ll a, ll b) {ll ans = 1;while (b) {if (b & 1) {ans = ans * a % p;}a = a * a % p;b >>= 1;}return ans % p;
}
inline int count(int x) {int ans = 0;while (x) {if (x & 1) ans++;x >>= 1;}return ans;
}
int main() {int x, n;scanf("%d%d", &x, &n);ll base = fastPow(2, n) - 1;ll ans = 0;for (int i = 1; i * i <= x; i++) {if (x % i == 0) {int num = count(i);ans = (ans + fastPow(base, num)) % p;if (i * i != x) {num = count(x / i);ans = (ans + fastPow(base, num)) % p;}}}cout << ans;return 0;
}

D(2202):EL PSY CONGROO

Time Limit: 2 sec

Description

凤凰院凶真又双叒叕踏上了拯救牧濑红莉栖之路,现在有 NN 条世界线 [l1,r1],[l2,r2],...,[lN,rN][l1,r1],[l2,r2],...,[lN,rN]。

从这些世界线中选出 KK 个,考虑其交集,即被所 有 KK 个世界线包含的点集。交集必然也是一个世界线,设为 [l,r][l,r],则其长度为 r−lr−l。

只有世界线的交集最大,冈部才有足够的时间完成任务。 请求出所有选出 KK 个世界线的方案中,交集长度最大的。

Input

输入的第一行包含一个整数 TT,代表测试数据的组数。接下来是 TT 组数据。

每组数据的第一行包含两个整数 NN 和 KK 。接下来NN行,每行包含两个整数 lili和 riri,描述一 个世界线。

Output

对于每组数据,输出一行,包含一个整数,代表交集的最大长度。

Sample Input

1
3 2
1 6
2 4
3 6

Sample Output

3

Hint

\[ 1≤T≤1000\\ 1≤K≤N≤10^5\\ 1≤li≤ri≤10^9\\ ∑n≤5∗10^5\ \]


题解:

先对左端点进行升序排序,则选到当前线段的左端点的交集就是当前左端点,同时用小根堆维护右端点的值,使堆大小始终为k,用堆顶的右端点值-当前左端点值更新答案,若超过k,则弹出堆顶的元素,因为它不可能在后面产出更优的答案了

代码:

#include<bits/stdc++.h>
#define maxn 100050
using namespace std;
inline int getnum() {char c; int ans = 0; int flag = 1;while (!isdigit(c = getchar()) && c != '-');if (c == '-') flag = -1; else ans = c - '0';while (isdigit(c = getchar())) ans = ans * 10 + c - '0';return ans * flag;
}
struct node {int l, r;bool operator < (const node a) const {return l < a.l;}
} a[maxn];
int main() {int t = getnum();while (t--) {priority_queue<int, vector<int>, greater<int> > q;int n = getnum(), k = getnum();for (int i = 1; i <= n; i++) {a[i].l = getnum();a[i].r = getnum();}sort(a + 1, a + n + 1);int ans = 0;for (int i = 1; i <= n; i++) {if (q.size() >= k) {q.pop();}q.push(a[i].r);if (q.size() == k) {int x = q.top();if (x - a[i].l > ans) {ans = x - a[i].l;}}}cout << ans << endl;}return 0;
}

E(2203):Mad Scientist

Time Limit: 5 Sec Memory Limit: 256 Mb


Description

凤凰院凶真是个Mad Scientist,他制造了大量Time Machine分布在一块 N×MN×M 的矩形网格区域。每格中要么什么都没有,要么有一个Time Machine。两个Time Machine之 间的距离定义为其曼哈顿距离。

对于 1≤d≤N+M−21≤d≤N+M−2,凶真想知道有多少对Time Machine的距离恰好为 dd。

Input

输入的第一行包含一个整数 TT ,代表测试数据的组数。接下来是 TT 组数据。

每组数据的第一行包含两个整数 NN 和 MM。

接下来 NN 行,每行包含一个长度为 MM 的 0101 串,为‘1’代表网格对应位置中有Time Machine,为‘0’则 代表无。

Output

对于每组数据,输出一行,包含 N+M−2N+M−2 个整数,其中第 dd 个代表距离为 dd 的Time Machine对数。

Sample Input

1
3 4
0011
0000
0100

Sample Output

1 0 1 1 0

Hint

\[ 1≤T≤3\\ 2≤N,M≤300 \]


题解:

此题愉快的不会,估计也会不了了...orz(流下了蒟蒻的泪水)

思路据说是维护左斜线和右斜线的前缀和,或者二维fft,总之我都不会

感想:

div 1太难了!!!早知道多做会div 2了!!div2倒着做做了两个题第三题不会就溜了,没看前两题挺水的,硬怼div 1大失败。下次但愿能从一开始做,这样div 1和div 2都有时间做了,中途开始有点伤

转载于:https://www.cnblogs.com/artoriax/p/10346754.html

csu-2018年11月月赛Round2-div1题解相关推荐

  1. 安恒赛php_安恒11月月赛周周练writeup

    前言 11月月赛 完美错过时间,正好有周周练,基本都是一样月赛的web,记录下write up 手速要快 这题是10月月赛中的一题,直接看我上次的writeup:安恒月赛(十)web-2题writeu ...

  2. 2018年工业机器人销量排位_长安-2018年11月汽车销量 细分销量

    根据盖世汽车社区-销量数据库查询,为广大汽车行业人士整理了长安-2018年11月细分销量(按变速箱)数据如下: 变速箱类型 九月 十月 十一月 累计 4AT[TS-40/Ss-II] 4,655 4, ...

  3. 泸州职称计算机,2018年11月四川泸州职称计算机考试10月8日开始报名

    [导语]2018年11月四川泸州职称计算机考试报名安排已发布,以下是无忧考网为您介绍了职称计算机考试时间.报名时间等,希望对大家有帮助,更多资料敬请关注无忧考网职称计算机考试频道,我们会为您及时更新相 ...

  4. CocoaPods管理iOS项目 2018年11月06日

    一.创建Test工程项目 二.打开终端 当前pod版本(1.6.0.beta.2最新版本2018年11月06日)和gem源路径(https://gems.ruby-china.com): 1.cd+当 ...

  5. python编程入门与案例详解-quot;Python小屋”免费资源汇总(截至2018年11月28日)...

    原标题:"Python小屋"免费资源汇总(截至2018年11月28日) 为方便广大Python爱好者查阅和学习,特整理汇总微信公众号"Python小屋"开通29 ...

  6. 逆水寒服务器维护公告,《逆水寒》2018年11月29日更新公告

    各位自在同门: 为了保证服务器的运行稳定和服务质量,<逆水寒>将于2018年11月29日早8:00停机进行维护工作,预计维护到上午10:00.如在维护期间无法完成维护内容,开机时间将顺延. ...

  7. 关于517编程的11月月赛

    关于517编程的11月月赛-Nov.29 by Jasonxu 我是传送门 T1:umin之和 1.1题目 小海狸定义 umin为最小的没有在子集中出现过的非负整数. 小海狸有一组非负整数,他希望将这 ...

  8. 2018年11月总结,12月计划

    2018年11月总结,12月计划 11月总结 书籍 <浪潮之巅> <Spring 微服务实战> <Spring Cloud 微服务实战> <安德的游戏> ...

  9. 计算机十一月份成绩,CPU天梯图2018年11月最新版 十一月台式电脑CPU性能排行

    Helio,大家好,距离上一次天梯图更新已经过去一个月时间了,伴随着新的月份到来,新的天梯图该进行更新修正了,下面小编带来CPU天梯图2018年11月最新版,希望对大家有所帮助. CPU天梯图2018 ...

最新文章

  1. 工作中5个实用的Linux命令
  2. oracle profile
  3. UITableView取消选中颜色、常用操作
  4. java 远程调试超时_java 远程调试
  5. layui table 列覆盖
  6. android如何监听按钮,Android – 两个onClick监听器和一个按钮
  7. 移动端输入框弹出键盘控制
  8. Windows8(2012) 如何改变登录界面上难看的头像,任意换!
  9. ROS: global_planner 整体解析
  10. DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=2 (转载)
  11. 宏程序自动生成软件_【软件】宏程序自动生成器V3.0下载
  12. android date 组件,Android中TimePicker与DatePicker时间日期选择组件的使用实例
  13. 28335scififo中断接收与发送
  14. 数学建模18年美赛题目中英文
  15. html中画分割线的代码,各种分割线Html代码
  16. 简易特效制作ByUnityParticleSystem
  17. 网络与信息安全学习日记
  18. asp.net928-研究生报名系统
  19. 转载 web前端进阶四阶段
  20. 手机鸿蒙系统的碎片管理,鸿蒙系统的超级终端、卡片管理、不杀后台功能,已甩安卓一条街...

热门文章

  1. Randy Pausch_卡内基梅隆大学演讲--真正实现你的梦想
  2. Redis核心技术笔记——Redis数据结构
  3. 【论文总结】Prototype Rectification for Few-Shot Learning(附翻译)
  4. Netty 心跳机制及断线重连
  5. fastjson 属性大写问题
  6. 人脸识别经典开源项目
  7. 自动化测试 | 这些常用测试平台,你们公司在用的是哪些呢?
  8. tv端h5_最新版H5双端影视APP源码
  9. 百度地图-创建标注 画线
  10. hdu 6447YJJ's Salesman 离散化+树状数组+DP