程序员进阶之算法练习(二十)

前言

这四个题属于中等,有的需要一定的代码量,有的需要奇妙的思考。

正文

1. Sonya and Queries
题目链接
** 题目大意:**
给出一个集合T,n个操作;
每个操作有3种情况:
1、往集合T里面添加一个数字x;
2、往集合T里面删除一个数字x;
3、询问集合T里面,里面与s能匹配的数量。
匹配的方式:对于两个数字x、y,如果两个数字每一位的奇偶性都相同,则认为匹配(不足的位数补0)。
357和135:
357
135
匹配;

13和257:
013
257
匹配;

13和247:
013
247
不匹配;

Exmample
input
4
+ 200
+ 200
- 200
? 0
output
1

n<=10w, x的范围10^18,添加的数字可以相同,删除时如果有多个数字x只删除一个;

题目解析:
从匹配方式入手。
奇偶性相同,意思就是对于每一个数字,可以转换成01010111的字符串。
那么数字x是否和数字y匹配,就相当于他们的010101字符串是否相同,那么我们可以定义一个trans操作。
数字x和数字y匹配,当且仅当trans(x) = trans(y)。

再来看操作1和操作2,对于询问来说245、45和5是等价的(001,01,1)。
那么操作1可以简化成加入一个trans(x)的数字,操作2简化成删除一个trans(x)的数字。
题目可解。

2. Sonya and Problem Wihtout a Legend
题目链接
题目大意:
给出n个数字,每次可以把一个数字+1或者-1,代价为1;
问把n个数字改为严格递增序列的最小代价。
n (1 ≤ n ≤ 3000)
ai (1 ≤ ai ≤ 1e9).

Example
** input**
5
5 4 3 2 1
** output**
12
样例解释:
1 2 3 4 5
|5 - 1| + |4 - 2| + |3 - 3| + |2 - 4| + |1 - 5| = 12

题目解析:
如果是非严格递增(即是a[i]=a[i+1]是可行的),可以用dp来解决。
令b[i]=第i大的数字, dp[i][j] 表示第前i个数字转移到第j大的数字的代价;
那么有dp[i][j] = min(dp[i][j], dp[i - 1][k] + abs(a[i] - b[i])); 1<= k <= j;
在求dp[i][j] 的过程中,维护一个dp[i-1][1~j]的最小值即可。
代码非常简短,如下:

    int n;
    cin >> n; 
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
        a[i] = b[i] = a[i] - i;
    }
    sort(b + 1, b + 1 + n);
    for (int i = 1; i <= n; ++i) {
        lld maxInf = llinf;
        for (int j = 1; j <= n; ++j) {
            maxInf = min(maxInf, dp[i - 1][j]);
            dp[i][j] = maxInf + abs(a[i] - b[j]);
        }
    }
    lld ans = llinf;
    for (int i = 1; i <= n; ++i) {
        ans = min(dp[n][i], ans);
    }
    cout << ans << endl;

3. Plus and Square Root
题目链接
** 题目大意:**
有一个特殊的计算器,只能执行加号和求平方根的操作,计算器有一个等级,用数字k表示;初始值为x。
执行完加号操作后,x=x+k;
执行完求根操作后,x=sqrt(x);(这个操作只有当x是perfect square的时候才能执行,且要求执行完的x必须是等级的倍数)
执行完求根操作后,等级会上升,k=k+1;(注意,执行完求根操作后,等级+1后再进行倍数的判断)
初始等级是1,初始值是2,问要到达等级n+1,在每次求根操作前需要执行几次加号操作?
如果有多个解,输出任意解都可以。

** Examples**
** input**
3
** output**
14
16
46
样例解释:表示在等级1、2、3的时候分别按14、16、46次加号;

** 题目解析:**
思路是从根号入手,题目要求x进行sqrt操作后的数字是等级的倍数,列出等级和初始值

 LEVEL  Init
 1      2, 2+1, 2+1+1
 2      2, 2+2, 2+2+2, ..., 2*(3*3*2)
 3      3*2, 3*2+3, 3*2+3+3, ..., 3*(4*4*3)
 ...
 i      i*j, i*j+i, i*j+i+i, ..., i*((k+1)*(k+1)*i)

sqrt( i*((k+1)*(k+1)*i)) = i * (k+1)
这样就找到一种构造方式,满足题意。

4. Complete The Graph
题目链接
题目大意:
给出n个点,m条边,边的长度为0到10^9;长度为0的边表示可修改边。
可修改边都需要赋值,边长必须是正整数。
要求赋值完成后,点s到点t的最短路刚好为L。
s n, m, L, s, t (2 ≤ n ≤ 1000,  1 ≤ m ≤ 10 000,  1 ≤ L ≤ 1e9,  0 ≤ s, t ≤ n - 1,  s ≠ t)

Examples
input
5 5 13 0 4
0 1 5
2 1 2
3 2 3
1 4 0
4 3 4
output
YES
0 1 5
2 1 2
3 2 3
1 4 8
4 3 4
样例解释:把边1-4的长度赋值为8。

** 题目解析:**
先不考虑可修改边。
求出s到t的最短路。
枚举每一条可修改边,先按照长度为1的大小加入;如果加入后的最短路小于L,则找到解,剩下的所有可修改边重置为inf。
在最短路中的找到刚刚添加的最后一条可修改边,把变成重置为L-dis+1,得到一个解。

总结

脑海中还积累着一部分知识,仍需一点时间理清思路。

灰蒙蒙的天气,犹如心情一样低沉。
昔日的球友在上海中医药大学打野球,本来阳光明媚的球场照片里应该也有我的身影。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容