列表

详情


NC14628. ChiMu need water

描述

Inori被抓走后,ChiMu决定去救她。但是一路上遇到了许多困难。目前遇到的问题就是,ChiMu不知道他能否走出这片沙漠。


已知,ChiMu每前进一个单位就会消耗一个单位的水,当ChiMu剩余的水量为0的时候就dead ending了。

好在ChiMu拿到了沙漠的地图,并且把绿洲标记了出来,因为他可以去绿洲补充水量,不过能补充的水量是有限的。

穿过的沙漠路径由一条从0开始的线段表示,每个绿洲都在该线段的某个整数单位长度点上。

ChiMu在初始状态保有10单位的水分。

输入描述

第一行为两个整数n,m。(1 <= n, m <= 100)
n表示需要穿过的沙漠的长度由0—n,m为可以补充水量的绿洲数量。
接下来m行输入,每行输入两个整数ai,bi。
分别表示在ai点上可以补充bi单位的水。

输出描述

如果ChiMu能穿过沙漠则输出
“Yse”
否则输出
"No"

示例1

输入:

10 4
4 7
8 6
8 1
7 8

输出:

Yes

说明:

注意,水量为0立即死亡。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 352K, 提交时间: 2018-10-27 13:49:17

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef struct ppo{
    int a,b;
}xyq;
int main(){
    int n,m,i,j,water=10;
    xyq pp[1000];
    cin>>n>>m;
    for(i=0;i<m;i++){
        cin>>pp[i].a>>pp[i].b;
    }
    for(i=0;i<=n;i++,water--){
        if(water==0){
            cout<<"No"<<endl;
            break;
        }
        for(j=0;j<m;j++){
            if(i==pp[j].a){
                water+=pp[j].b;
            }
        }
    }
    if(i==n+1) cout<<"Yes"<<endl;
    return 0;
}

Java(javac 1.8) 解法, 执行用时: 43ms, 内存消耗: 11084K, 提交时间: 2020-06-29 11:36:10

import java.util.*;
public class Main{
	public static void main(String[] args) {
		Scanner i=new Scanner(System.in);
		int n=i.nextInt(),m=i.nextInt(),s=10,b;
		int [] a=new int[100000];
		for(b=0;b<m;b++)
			a[i.nextInt()]=+i.nextInt();
		for(b=0;b<=n;b++)
		{
			s=s-1;
			if(s==0)
				break;
			s+=a[b];
		}
		if(b==n+1)
		System.out.println("Yes");	
		else
		System.out.println("No");		
    }
}

C 解法, 执行用时: 2ms, 内存消耗: 348K, 提交时间: 2022-11-25 09:29:41

#include <stdio.h>
#define N 105
int main(){
    int a[N]={0},n,m,i,t,water=10;
    scanf("%d%d",&n,&m);
    for(i=0;i<m;i++) {
        scanf("%d",&t);
        scanf("%d",&a[t]);
    }
    for(i=1;i<=n;i++){
        water--;
        if(water==0) break;
        water+=a[i];
       
    }
    if(i<=n) printf("No");
    else printf("Yes");
    return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 396K, 提交时间: 2020-08-15 20:20:14

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,m,x,y,v[200];
	memset(v,0,sizeof(v));
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>x>>y;
		v[x]=v[x]+y;
	}
	int b=10;
	for(int i=0;i<=n;i++){
		b--;
		if(b<=0){
			cout<<"No"<<endl;
			break;
		}
		b=b+v[i];
	}
	if(b>0)
	cout<<"Yes"<<endl;
	return 0;
}

上一题