1 solutions
-
0
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