1 solutions

  • 0
    @ 2025-11-5 15:28:59

    C++ :

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    const int NN = 101;
    const int MM = 101;
    
    const double ROAD = 10;
    const double RECEIVES = 15.0/60;
    
    int FindNextBuilding(int rices[], int start)
    {
        int i;
        for (i = start; i >=0; i--)
            if (rices[i] != 0)
                return i;
        return -1;
    }
    
    
    double Process(int rices[], const int M, const int N)
    {
        double sum = 0;
        int send = 0;
        int i, j;
    
        i = N - 1;
        while ( (i = FindNextBuilding(rices, i)) != -1)
        {
            sum += (i+1) * ROAD * 2;
            send = 0;
    
            for (j = i; j >=0; j--)
            {
                if (send >= M)
                {
                    break;
                }
                else if (rices[j] >= M - send)
                {
                    rices[j] -= M - send;
                    send = M;   
                    break;
                }
                else
                {
                    send +=  rices[j];
                    rices[j] = 0;
                }            
            }
    
            i = j;
            
        }
        return sum;
    }
    
    
    int main()
    {
    
        int M, N, i;
        int rices[NN];
        double dsum;
        while(cin>>M >>N)
        {
            dsum = 0;
            for (i = 0; i < N; i++)
            {
                scanf("%d", &rices[i]);
    
                dsum += rices[i] * RECEIVES;
            }
    
            dsum += Process(rices, M, N);
            printf("%.2f\n", dsum);
            //cout<<dsum <<endl;
        }
    
    	return 0;
    }
    
    

    Java :

    import java.util.Scanner;
    
    public class Main{
        public static void main(String[] args){
    	    Scanner in = new Scanner(System.in);
    	    while(in.hasNextInt()){
    	    	int M = in.nextInt();
    	    	int N = in.nextInt();
    	    	int a[] = new int[N];
    	    	int sum = 0;
    	    	for(int i = 0;i<N;i++){
    	    		a[i] = in.nextInt();
    	    		sum += a[i];
    	    	}
    	    	int t1 = sum*15;
    	    	int t2 = 0;
    	    	
    	    	for(int i = N-1;i>=0;i--){
    	    		boolean bl = false;
    	    		int F = M;
    	    		while(true){
    	    		
    		    		if(F==0){
    		    			F=M;
    		    			bl = false;
    		    		}
    		    		
    		    		if(a[i]==0) break;
    		    		
    		    		t2 += (i+1)*20*60;
    		    		
    		    		for(int j = N-1;j>=0;j--){
    		    			while(a[j]>0&&F>0){
    		    				a[j]--;
    		    				F--;
    		    			}
    		    			if(F==0){
    		    				bl = true;
    		    				break;
    		    			}
    		    			if(bl) break;
    		    		}
    		    	
    	    	}
    	    	}
    	    	int res = t1 + t2;
    	    	double result = res*1.0/60;
    	    	System.out.printf("%.2f",result);
    	    	System.out.println();
    	    }
        }
    }
    
    • 1

    Information

    ID
    16843
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By