左括号右括号之”Parencodings“

题目大意:

  解释了一种标记方式,对于一个仅仅有左右括号的字符串 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 }
原文地址:https://www.cnblogs.com/love-fromAtoZ/p/7551667.html