A. Optimal Currency Exchange

题意:拥有n卢比,d卢比换一美元,e卢比换一欧元,美元面额1 , 2, 5, 10, 20, 50, 100 欧元面额5 , 10, 20, 50, 100, 200,求手中最小的剩余卢比数
思路:美元可以都换做一美元处理,欧元可以用5处理,枚举一美元的数量,把min存下来

input
100
60
70
output
40
input
410
55
70
output
 1 package The583;
 2 
 3 import java.util.HashSet;
 4 import java.util.Scanner;
 5 
 6 public class MainB {
 7     public static void main(String args[])
 8     {
 9         Scanner sc=new Scanner(System.in);
10         HashSet<String> set=new HashSet<String>();
11         int n=sc.nextInt(),m=sc.nextInt(),k=sc.nextInt();
12         int sum=0;
13         for(int i=0;i<=n&&i<=k;i++)
14             if(k-i<=m)
15             {
16                 sum++;//System.out.println(i+" "+(k-i));
17                 set.add(i+" "+(k-i));
18             }
19         for(int i=0;i<=m&&i<=k;i++)
20             if(k-i<=n)
21             {
22                 if(set.contains((k-i)+" "+i))
23                     continue;
24                 sum++;//System.out.println(i+" "+(k-i));
25                 set.add((k-i)+" "+i);
26             }
27         System.out.println(sum);
28     }
29 
30 }
View Code

 

5
input
600
60
70
output
0

            B. Badges

题意:n男孩,m女孩,k个名额求不同的男女组合数
思路:直接枚举就好,(我还写了个set判重,好像写复杂了)

input
5
6
3
output
4
input
5
3
5
output
4
          
 1 package The583;
 2 
 3 import java.util.Arrays;
 4 import java.util.Scanner;
 5 
 6 public class MainA {
 7     public static void main(String args[])
 8     {
 9         Scanner sc=new Scanner(System.in);
10         int n=sc.nextInt(),d=sc.nextInt(),e=sc.nextInt()*5;
11         int min=n%e;//换0美元后其他的全换欧元剩下的卢比
12         for(int i=1;d*i<=n;i++)
13         {
14             min=Math.min(min, (n-(d*i))%e);//n-换的美元,剩下的换欧元
15         }
16         System.out.println(min);
17     }
18 
19 }
View Code

           

 

            C. Bad Sequence

 题意:给你n/2对括号,最多交换2个的位置,问是否可以使其合法
思路:如果n为奇数直接输出NO,“(”不用管,记录数量就行,“)”记录数量,然后和left比较,如果left小于right,将“)”变为“(”,用cnt记录变的次数,超过一次直接输出No,最后判断即可:注意当cnt==1时,left是比right多1的

input
2
)(
output
Yes
input
3
(()
output
No
input
Copy
2
()
output
Yes
input
10
)))))(((((
output
No
 1 package The583;
 2 
 3 import java.util.Scanner;
 4 
 5 public class MainC{
 6     public static void main(String args[])
 7     {
 8         Scanner sc=new Scanner(System.in);
 9         int n=sc.nextInt();
10         String s=sc.next();
11         if(n%2!=0)
12             System.out.println("No");
13         else
14         {
15             boolean bool=true;
16             int left=0,right=0,cnt1=0;
17             for(int i=0;i<n&&bool;i++)
18             {
19                 if(s.charAt(i)=='(')
20                 {
21                     left++;
22                 
23                 }
24                 else
25                 {
26                     right++;
27                     if(left<right)
28                     {
29                         left++;
30                         if(cnt1==1)
31                         {
32                             bool=false;
33                         }
34                         cnt1++;
35                     }
36                     
37                     
38                 }
39             }
40             if(bool)
41             {
42                 if(left==right)
43                     System.out.println("Yes");
44                 else if(cnt1==1&&left-right==1)
45                     System.out.println("Yes");
46                 else
47                     System.out.println("No");
48             }
49             else
50                 System.out.println("No");
51         }
52         
53     }
54 
55 }
View Code

 

 

            D. Treasure Island

题意:一个地图,#代表不能走,要从左上角走到右下角,每次只能向下或者向右, 求最少放几个障碍物使其走不到右下角
思路:答案只有0,1,2这三种,随便找一条路,并标记,如果走不到输出0,否走再走一遍dfs,这次不走之前标记过的点,如果可以走到输出2,否则输出1

input
2 2
..
..
output
2
input
4 4
....
#.#.
....
.#..
output
1
input
3 4
....
.##.
....
output
2
 1 package The583;
 2 
 3 import java.util.Scanner;
 4 
 5 public class MainD {
 6     static int n,m;
 7     static char map[][];
 8     static boolean vis[][];
 9     public static void main(String args[])
10     {
11         Scanner sc=new Scanner(System.in);
12         n=sc.nextInt();m=sc.nextInt();
13         vis=new boolean[n][m];
14          map=new char[n][m];
15         for(int i=0;i<n;i++)
16         {
17             map[i]=sc.next().toCharArray();
18         }
19         if(!dfs(0,0))
20             System.out.println(0);
21         else
22         {
23             vis[n-1][m-1]=false;//第一次dfs把这里赋值true了;
24             if(dfs(0,0))
25                 System.out.println(2);
26             else
27                 System.out.println(1);
28         }
29     }
30     public static boolean dfs(int x,int y)
31     {
32         if(x==n-1&&y==m-1)
33         {
34             return true;
35         }
36         int dx=x,dy=y+1;
37         if(dy<m&&map[dx][dy]!='#'&&!vis[dx][dy])
38         {
39             vis[dx][dy]=true;
40             if(dfs(dx,dy))
41                 return true;
42         }
43         dx=x+1;dy=y;
44         if(dx<n&&map[dx][dy]!='#'&&!vis[dx][dy])
45         {
46             vis[dx][dy]=true;
47             if(dfs(dx,dy))
48                 return true;
49         }
50         return false;
51     }
52 }
View Code

 

posted on 2019-09-06 14:37  狗的屎壳郎  阅读(98)  评论(0编辑  收藏  举报