2021.02.21补题

A. Space Navigation

题意:通过给定的上下左右移动步骤指示,并且这些指示可以进行删除,问是否可以到达指定地点

思路:直接寻找是不是不少于一定要求的那些步数

代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<cstring>
 6 using namespace std;
 7 const int maxx=1e5+10;
 8 int main(){
 9     int t;
10     scanf("%d",&t);
11     while(t--){
12         int x,y;
13         scanf("%d %d",&x,&y);
14         char s[maxx];
15         getchar();
16         scanf("%s",&s);
17         int u=0,l=0,r=0,d=0;
18         for(int i=0;i<strlen(s);i++){
19             if(s[i]=='U'){
20                 u++;
21             }
22             if(s[i]=='D'){
23                 d++;
24             }
25             if(s[i]=='L'){
26                 l++;
27             }
28             if(s[i]=='R'){
29                 r++;
30             }
31         }
32         if(x>=0&&y>=0){
33             if(r>=x&&u>=y){
34                 printf("YES\n");
35             }else{
36                 printf("NO\n");
37             }
38         }else if(x>=0&&y<=0){
39             if(r>=x&&d>=-y){
40                 printf("YES\n");
41             }else{
42                 printf("NO\n");
43             }
44         }else if(x<=0&&y>=0){
45             if(l>=-x&&u>=y){
46                 printf("YES\n");
47             }else{
48                 printf("NO\n");
49             }
50         }else{
51             if(l>=-x&&d>=-y){
52                 printf("YES\n");
53             }else{
54                 printf("NO\n");
55             }
56         }
57     }
58 }
View Code

B. New Colony

题意:就是从第一座山开始扔石块,必须满足hi<hi+1,才能够停留在这个位置上,问最后一个石头落在了哪座山上,一块石块落在一座山上那么这座山的高度就+1,如果在最后一座山上就会滑下去,直接输出-1

思路:暴力模拟

 

代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<cstring>
 6 using namespace std;
 7 const int maxx=1e5+10;
 8 int main(){
 9     int t;
10     scanf("%d",&t);
11     while(t--){
12         int n,k;
13         scanf("%d %d",&n,&k);
14         int a[500],b[500]={0};
15         for(int i=1;i<=n;i++){
16             scanf("%d",&a[i]);
17         }
18         int minn=-1e9;
19        /* for(int i=1;i<n;i++){
20             b[i]=a[i]-a[i+1];
21         }
22         for(int i )*/
23         int bp=0;
24         int flag=0;
25         int sum=0;
26         while(k--){
27             for(int i=1;i<n;i++){
28                 bp=0;
29                 if(a[i]>=a[i+1]){
30                     continue;
31                 }else{
32                     a[i]++;
33                     flag=i;
34                     bp=1;
35                     break;
36                 }
37             }
38             if(bp==0){
39                 break;
40             }
41         }
42         if(bp==1){
43             printf("%d\n",flag);
44         }else{
45             printf("-1\n");
46         }
47  
48     }
49  
50 }
View Code

C. Fence Painting

题意:就是给篱笆上色原色是数组a,目标颜色是b,雇佣了m名工人,必须全部用上这m名工人,问这m名工人是不是能完成这项任务,如果能的话每个工人需要刷的栅栏位置是哪一个

思路:先查找那些a数组和b数组中颜色对不上的里面是不是能够找到对应的工人,再通过剩下的工人进行确认,剩下的工人有三种选择:1)查询a和b中相等的数据是不是有满足c条件的;2)在这个工人之前染色的篱笆中有没有此工人对应的b数组;3)查询后面的工人中,有没有染色的,如果有就直接进行染色就行,毕竟后面还会重复染上正确的颜色

注意:1)一开始我想要用两个for循环进行对应值的查找;2)其实多个都需要用数组b和别人作比较来找到b中某些元素对应的i,那么这样一来普通数组是i对应bi,这样map改变一下bi对应i,何尝不是更好的选择,省去了循环比较的时间复杂度

代码:由于太菜,代码未知

 

posted @ 2021-02-21 15:19  bonel  阅读(59)  评论(0)    收藏  举报