#include <cstdio> #include <algorithm> #include <vector> int main( ) { //printf("Hello\n"); int n; // liczba klientów int m; // liczba piekarników scanf("%d %d", &n, &m); int i,j; unsigned long long t[200000] = {}; // czasy unsigned long long diffT[200000] = {}; // różnice między timestampami int p[200000] = {}; // piekarniki - czasy pieczenia unsigned long long lastP[200000] = {}; // piekarniki - czasy pieczenia std::vector<int> notAnalyzedIdx = std::vector<int>(); std::vector<int> newNotAnalyzedIdx = std::vector<int>(); std::vector<int> tmp; for(i = 0 ; i < 200000; i++) { diffT[i] = 0; p[i] = 0; lastP[i] = 0; t[i] = 0; } unsigned long long partialDiffSum = 0; notAnalyzedIdx.resize(n); newNotAnalyzedIdx.reserve(n); unsigned long long prev = 0; unsigned long long arithmeticSum = ((1+n)*n)/2; //printf("Arithmetic sum %lld\n", arithmeticSum); for(i = 0 ; i < n; i++) { unsigned long long x = 0; scanf("%lld", &x); t[i] = x; diffT[i] = x - prev; prev = x; notAnalyzedIdx[i] = i; //printf("Some data %lld %d\n", diffT[i], notAnalyzedIdx[i]); } for(i = 0 ; i < m; i++) { int x = 0; scanf("%d", &x); p[i] = x; //printf("Piekarnik %d", p[i]); } //std::sort(p, p+m); for(i = 0 ; i < m; i++) { int pTime = p[i]; unsigned long long sum = 0; for(j = 0 ; j < n; j++) { lastP[i] = std::max(lastP[i] + pTime, t[j]); sum = sum + lastP[i] - t[j]; //printf("Piekarnik %d %lld %lld %lld", pTime, lastP[i], t[j], sum); } printf("%lld\n", sum); /*newNotAnalyzedIdx.clear(); int pTime = p[i]; printf("ptime %d\n", pTime); for(j = 0 ; j < notAnalyzedIdx.size(); j++) { int idx = notAnalyzedIdx[j]; printf("idx %d\n", idx); unsigned long long timeDiff = diffT[idx]; if (timeDiff > pTime) { newNotAnalyzedIdx.push_back(idx); } else { int numberOfAffected = n - idx; partialDiffSum += numberOfAffected*timeDiff; } } unsigned long long affectedArithmeticSum = arithmeticSum; for (j = 0; j < newNotAnalyzedIdx.size(); j++) { affectedArithmeticSum = affectedArithmeticSum - newNotAnalyzedIdx[j]; } unsigned long long result = affectedArithmeticSum * pTime - partialDiffSum; printf("partial %lld\n", partialDiffSum); tmp = notAnalyzedIdx; notAnalyzedIdx = newNotAnalyzedIdx; newNotAnalyzedIdx = tmp; printf("out %lld\n", result);*/ } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #include <cstdio> #include <algorithm> #include <vector> int main( ) { //printf("Hello\n"); int n; // liczba klientów int m; // liczba piekarników scanf("%d %d", &n, &m); int i,j; unsigned long long t[200000] = {}; // czasy unsigned long long diffT[200000] = {}; // różnice między timestampami int p[200000] = {}; // piekarniki - czasy pieczenia unsigned long long lastP[200000] = {}; // piekarniki - czasy pieczenia std::vector<int> notAnalyzedIdx = std::vector<int>(); std::vector<int> newNotAnalyzedIdx = std::vector<int>(); std::vector<int> tmp; for(i = 0 ; i < 200000; i++) { diffT[i] = 0; p[i] = 0; lastP[i] = 0; t[i] = 0; } unsigned long long partialDiffSum = 0; notAnalyzedIdx.resize(n); newNotAnalyzedIdx.reserve(n); unsigned long long prev = 0; unsigned long long arithmeticSum = ((1+n)*n)/2; //printf("Arithmetic sum %lld\n", arithmeticSum); for(i = 0 ; i < n; i++) { unsigned long long x = 0; scanf("%lld", &x); t[i] = x; diffT[i] = x - prev; prev = x; notAnalyzedIdx[i] = i; //printf("Some data %lld %d\n", diffT[i], notAnalyzedIdx[i]); } for(i = 0 ; i < m; i++) { int x = 0; scanf("%d", &x); p[i] = x; //printf("Piekarnik %d", p[i]); } //std::sort(p, p+m); for(i = 0 ; i < m; i++) { int pTime = p[i]; unsigned long long sum = 0; for(j = 0 ; j < n; j++) { lastP[i] = std::max(lastP[i] + pTime, t[j]); sum = sum + lastP[i] - t[j]; //printf("Piekarnik %d %lld %lld %lld", pTime, lastP[i], t[j], sum); } printf("%lld\n", sum); /*newNotAnalyzedIdx.clear(); int pTime = p[i]; printf("ptime %d\n", pTime); for(j = 0 ; j < notAnalyzedIdx.size(); j++) { int idx = notAnalyzedIdx[j]; printf("idx %d\n", idx); unsigned long long timeDiff = diffT[idx]; if (timeDiff > pTime) { newNotAnalyzedIdx.push_back(idx); } else { int numberOfAffected = n - idx; partialDiffSum += numberOfAffected*timeDiff; } } unsigned long long affectedArithmeticSum = arithmeticSum; for (j = 0; j < newNotAnalyzedIdx.size(); j++) { affectedArithmeticSum = affectedArithmeticSum - newNotAnalyzedIdx[j]; } unsigned long long result = affectedArithmeticSum * pTime - partialDiffSum; printf("partial %lld\n", partialDiffSum); tmp = notAnalyzedIdx; notAnalyzedIdx = newNotAnalyzedIdx; newNotAnalyzedIdx = tmp; printf("out %lld\n", result);*/ } return 0; } |