Codeforces Round #699 (Div. 2) 补题A B

A. Space Navigation

在这里插入图片描述
分析: 讨论区间即可

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int t,px,py;
char s[N];
int main(){
    
    
    cin>>t;
    while(t--){
    
    
        int you=0,zuo=0,shang=0,xia=0,pd1=0,pd2=0;
        cin>>px>>py;
        cin>>s;
        for(int i=0;s[i];i++){
    
    
            if(s[i]=='U') shang++;
            else if(s[i]=='D') xia++;
            else if(s[i]=='R') you++;
            else if(s[i]=='L') zuo++;
        }
        if(px<0){
    
    
            if(abs(px)<=zuo) pd1=1;
        }
        else{
    
    
            if(px<=you) pd1=1;
        }
        if(py<0){
    
    
            if(abs(py)<=xia) pd2=1;
        }
        else{
    
    
            if(py<=shang) pd2=1;
        }
        if(pd1&&pd2) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
}

B. New Colony

在这里插入图片描述
分析: 如果有 100 100 100个山, k k k足够大时,最多填充 ( n − 1 ) ( 100 − 1 ) (n-1)(100-1) (n1)(1001)次,此后石头将一直回收,所以时间复杂度是 O ( 100 n ) , O(100n), O(100n)所以可以直接模拟。

代码:

#include<stdio.h>
#include<string.h>
using namespace std;
const int N=1000;
int t,n,a[N];
long long int k;
int main(){
    
    
    scanf("%d",&t);
    while(t--){
    
    
        memset(a,0,sizeof a);
        int flag=-1;
        scanf("%d %d",&n,&k);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        for(int i=0;i<k;i++){
    
    
            for(int j=1;j<=n;j++){
    
    
                if(j==n){
    
    
                    k=0;
                    flag=n;
                    break;
                }
                if(a[j]<a[j+1]){
    
    
                    a[j]++;
                    if(i==k-1) flag=j;
                    break;
                }
            }
        }
        if(flag==n) printf("-1\n");
        else printf("%d\n",flag);
    }
}

猜你喜欢

转载自blog.csdn.net/messywind/article/details/113714760