Submission #972954

#TimeUsernameProblemLanguageResultExecution timeMemory
972954sleepntsheepPalembang Bridges (APIO15_bridge)C11
22 / 100
43 ms1944 KiB
#include <stdio.h> #include <stdlib.h> #define MAX_N 100000 int min(int a,int b){return a<b?a:b;} int max(int a,int b){return a>b?a:b;} int cmpr(const void*a,const void*b){return *(const int*)a - *(const int*)b;} int n, k, c[1+MAX_N<<1], p; long long cost, pc[1+MAX_N<<1], z = 1e18; int main() { scanf("%d%d", &k, &n); for (int s, t, i = 0; i < n; ++i) { char bb, cc; scanf(" %c%d %c%d",&bb,&s,&cc,&t); if(bb==cc) cost += abs(t-s); else { c[++p] = s; c[++p] = t; ++cost; } } qsort(c+1, p, sizeof*c, cmpr); if(k==1) { for(int j=1;j<=p;++j) cost += abs(c[p/2] - c[j]); printf("%lld\n", cost); return 0; } /* partial sum on c */ for (int i = 1; i <= p; ++i) pc[i] = pc[i-1] + c[i]; /* some prefix of points will choose left bridge and the rest will choose right bridge * * - fix prefix and find optimal cost for that prefix */ for (int i = 1; i <= p; ++i) { /* c[1..i] will use left bridge, the rest using right bridge */ long long cost1 = 0, j; /* left bridge*/ j = (i+1)/2ll; cost1 += j*c[j] - pc[j]; cost1 += (pc[i] - pc[j]) - c[j]*(i-j); /* right bridge*/ j = (p-i+1)/2+i; cost1 += c[j]*1ll*(j-i) - (pc[j] - pc[i]); cost1 += (pc[p] - pc[j]) - c[j]*1ll*(p-j); if(cost1<z)z=cost1; } printf("%lld",z+cost); }

Compilation message (stderr)

bridge.c:9:20: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
    9 | int n, k, c[1+MAX_N<<1], p;
      |                    ^~
bridge.c:10:27: warning: suggest parentheses around '+' inside '<<' [-Wparentheses]
   10 | long long cost, pc[1+MAX_N<<1], z = 1e18;
      |                           ^~
bridge.c: In function 'main':
bridge.c:14:5: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   14 |     scanf("%d%d", &k, &n);
      |     ^~~~~~~~~~~~~~~~~~~~~
bridge.c:18:9: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 |         scanf(" %c%d %c%d",&bb,&s,&cc,&t);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...