打卡信奥刷题(173)用Scratch图形化工具信奥P7478 [普及组] StickSuger

StickSuger

题目背景

YSGHYYDS

题目描述

YSGH 给你一个长度为 n n n 的字符串 S S S。设 S x S_x Sx 表示字符串 S S S 的第 x x x 个字符。你可以选择一个二元组 ( i , j ) (i,j) (i,j),然后交换 S i S_i Si S j S_j Sj。二元组 ( i , j ) (i,j) (i,j) 是合法的当且仅当 1 ≤ i < j ≤ n 1\leq i<j\leq n 1i<jn 并且交换后的字符串的字典序比原串大。

对于两个字符 c 0 , c 1 c_0,c_1 c0,c1,称 c 0 > c 1 c_0>c_1 c0>c1 当且仅当 c 0 c_0 c0 的 ASCII 码大于 c 1 c_1 c1 的 ASCII 码。

对于两个长度为 n n n 的字符串 S , T S,T S,T S S S 的字典序大于 T T T 当且仅当存在一个 i ∈ [ 0 , n − 1 ] i\in [0,n-1] i[0,n1] 使得 ∀ j ∈ [ 1 , i ] , S j = T j \forall j\in[1,i],S_j=T_j j[1,i],Sj=Tj, 并且 S i + 1 > T i + 1 S_{i+1}>T_{i+1} Si+1>Ti+1

如果存在多种合法方案,输出最大的二元组。

对于两个二元组 ( i 1 , j 1 ) (i_1,j_1) (i1,j1) ( i 2 , j 2 ) (i_2,j_2) (i2,j2),称 ( i 1 , j 1 ) (i_1,j_1) (i1,j1) 小于 ( i 2 , j 2 ) (i_2,j_2) (i2,j2) 当且仅当 i 1 < i 2 ∨ ( i 1 = i 2 ∧ j 1 < j 2 ) i_1<i_2\lor(i_1=i_2\land j_1<j_2) i1<i2(i1=i2j1<j2)

如果不存在合法方案,则输出 -1

保证 S S S 只包含小写英文字母。

输入格式

第一行,一个正整数 n n n,表示字符串 S S S 的长度。

第二行,一个字符串 S S S

输出格式

如果无解,输出 -1

否则一行输出两个整数 i , j i,j i,j 表示最大的合法二元组 ( i , j ) (i,j) (i,j)

样例 #1

样例输入 #1

3
acb

样例输出 #1

1 3

样例 #2

样例输入 #2

6
zyxwvu

样例输出 #2

-1

样例 #3

样例输入 #3

14
aabbccddccbbaa

样例输出 #3

6 8

提示

【样例解释 #1】

如果选择二元组 ( 2 , 3 ) (2,3) (2,3),交换 S 2 S_2 S2 S 3 S_3 S3 后的字符串为 abc,字典序比 acb 小,所以不合法。

如果选择二元组 ( 1 , 3 ) (1,3) (1,3),交换 S 1 S_1 S1 S 3 S_3 S3 后的字符串为 bca,字典序比 acb 大,是合法的。

虽然 ( 1 , 2 ) (1,2) (1,2) 也是合法的,但是没有 ( 1 , 3 ) (1,3) (1,3) 大。所以答案是 ( 1 , 3 ) (1,3) (1,3)

【样例解释 #2】

容易看出任何一个二元组都不合法。


【数据范围】

本题采用捆绑测试。

对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 1 0 6 1\leq n\leq 10^6 1n106 S S S 只包含小写英文字母。

  • Subtask 1(4 points): S S S 只包含一种字符。
  • Subtask 2(10 points): n ≤ 100 n\leq 100 n100
  • Subtask 3(16 points): n ≤ 500 n\leq 500 n500
  • Subtask 4(25 points): n ≤ 5000 n\leq 5000 n5000
  • Subtask 5(18 points): n ≤ 1 0 5 n\leq 10^5 n105
  • Subtask 6(27 points): n ≤ 1 0 6 n\leq 10^6 n106

Scratch实现

在这里插入图片描述

后续

接下来我会不断用scratch来实现信奥比赛中的算法题、Scratch考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值