题目大意:
解释了一种标记方式,对于一个仅仅有左右括号的字符串 S ,给它两重命名方式
姑且叫做 P命名 和 W命名。要求输入 P命名 得到 W命名。
给出了一个例子(以下扩号用中文括号,方便观察,其实用啥都一样):
S: (((()()())))
P: 4 5 6666
W: 1 1 1456
样例:
2 //代表数据组数
6 //代表接下来有几个数
4 5 6 6 6 6
9
4 6 6 6 6 8 9 9 9
————————
1 1 1 4 5 6
1 1 2 4 5 1 1 3 9
解题思路:
根据例子:
S: (((()()())))
P: 4 5 6666
W: 1 1 1456
我们能发现规律:
P命名 就是看 右括号 之前有几个 左括号。
W命名就是看 右括号 距离与之对应的 左括号 的间隔。
然后手动模拟,逐个输出。
AC代码:
1 import java.util.*; 2 3 public class Main{ 4 public static void main(String[] args){ 5 Scanner sc = new Scanner(System.in); 6 while(sc.hasNext()){ 7 long a = sc.nextLong(); 8 long b = sc.nextLong(); 9 int flag = 0; 10 if(4 * a < b && flag == 0){ 11 long t = 0;t = 10 * a - 2 * b; 12 if(t > 0){System.out.println(t);} 13 else{System.out.println("Deficit");} 14 flag = 1; 15 } 16 if(3 * a < 2 * b && flag == 0){ 17 long t = 0;t = 8 * a - 4 * b; 18 if(t > 0){System.out.println(t);} 19 else{System.out.println("Deficit");} 20 flag = 1; 21 } 22 if(2 * a < 3 * b && flag == 0){ 23 long t = 0;t = 6 * a - 6 * b; 24 if(t > 0){System.out.println(t);} 25 else{System.out.println("Deficit");} 26 flag = 1; 27 } 28 if(a < 4 * b && flag == 0){ 29 long t = 0;t = 3 * a - 9 * b; 30 if(t > 0){System.out.println(t);} 31 else{System.out.println("Deficit");} 32 flag = 1; 33 } 34 if(flag == 0){System.out.println("Deficit");} 35 } 36 } 37 }