結果
問題 | No.2852 Yakitori Optimization Problem |
ユーザー | nekoti |
提出日時 | 2024-08-25 14:23:19 |
言語 | C (gcc 12.3.0) |
結果 |
AC
|
実行時間 | 136 ms / 2,000 ms |
コード長 | 2,850 bytes |
コンパイル時間 | 226 ms |
コンパイル使用メモリ | 30,592 KB |
実行使用メモリ | 12,668 KB |
最終ジャッジ日時 | 2024-08-25 14:23:22 |
合計ジャッジ時間 | 3,464 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 32 ms
6,812 KB |
testcase_01 | AC | 94 ms
9,864 KB |
testcase_02 | AC | 77 ms
8,840 KB |
testcase_03 | AC | 132 ms
12,360 KB |
testcase_04 | AC | 101 ms
10,808 KB |
testcase_05 | AC | 37 ms
6,944 KB |
testcase_06 | AC | 12 ms
6,944 KB |
testcase_07 | AC | 101 ms
10,340 KB |
testcase_08 | AC | 9 ms
6,940 KB |
testcase_09 | AC | 130 ms
12,356 KB |
testcase_10 | AC | 135 ms
12,600 KB |
testcase_11 | AC | 133 ms
12,612 KB |
testcase_12 | AC | 136 ms
12,660 KB |
testcase_13 | AC | 133 ms
12,668 KB |
testcase_14 | AC | 132 ms
12,660 KB |
testcase_15 | AC | 135 ms
12,660 KB |
testcase_16 | AC | 134 ms
12,532 KB |
ソースコード
#define _DEBUG 0 #include<stdio.h> #include<stdbool.h> #include<string.h> #include<stdlib.h> //■構造体qsort(複数文字列も可) typedef struct st { int idx; long long a; long long b; long long c; long long diff; } st; #define _SORT_TYPE st #define _LIST_NUM (200010) _SORT_TYPE stList[_LIST_NUM]; // 昇順:上から1,-1,0 int cmpnum_idx_asc(const void * n1, const void * n2){ if(((_SORT_TYPE *)n1)->idx > ((_SORT_TYPE *)n2)->idx)return 1; else if(((_SORT_TYPE *)n1)->idx < ((_SORT_TYPE *)n2)->idx)return -1; else return 0; } int cmpnum_a_asc(const void * n1, const void * n2){ if(((_SORT_TYPE *)n1)->a > ((_SORT_TYPE *)n2)->a)return 1; else if(((_SORT_TYPE *)n1)->a < ((_SORT_TYPE *)n2)->a)return -1; else return 0; } int cmpnum_b_asc(const void * n1, const void * n2){ if(((_SORT_TYPE *)n1)->b > ((_SORT_TYPE *)n2)->b)return 1; else if(((_SORT_TYPE *)n1)->b < ((_SORT_TYPE *)n2)->b)return -1; else return 0; } int cmpnum_c_asc(const void * n1, const void * n2){ if(((_SORT_TYPE *)n1)->c > ((_SORT_TYPE *)n2)->c)return 1; else if(((_SORT_TYPE *)n1)->c < ((_SORT_TYPE *)n2)->c)return -1; else return 0; } int cmpnum_diff_dsc(const void * n1, const void * n2){ if(((_SORT_TYPE *)n1)->diff > ((_SORT_TYPE *)n2)->diff)return -1; else if(((_SORT_TYPE *)n1)->diff < ((_SORT_TYPE *)n2)->diff)return 1; else return 0; } int main(void) { int scan;//scanf警告用 int i, j; int n,k;scan=scanf("%d%d",&n,&k); long long val; //【A】 for(i=0; i<n; i++) { scan=scanf("%lld",&val); stList[i].idx=i; stList[i].a=val; } //【B】 for(i=0; i<n; i++) { scan=scanf("%lld",&val); stList[i].idx=i; stList[i].b=val; } //【C】 for(i=0; i<n; i++) { scan=scanf("%lld",&val); stList[i].idx=i; stList[i].c=val; stList[i].diff=stList[i].b-stList[i].c; if(stList[i].diff<0)stList[i].diff*=-1; } qsort(stList, n, sizeof(_SORT_TYPE), cmpnum_diff_dsc); #if _DEBUG for(i=0; i<n; i++) { printf("diff=%lld : b=%lld c=%lld\n",stList[i].diff,stList[i].b,stList[i].a); } #endif int bcount=0,ccount=0; long long sum=0; //イコールのやつのこと考えてみる for(i=0; i<n; i++) { if(stList[i].b>stList[i].c) { //塩? if(bcount<k) { //塩 sum+=stList[i].b; bcount++; } else { //タレ sum+=stList[i].c; ccount++; } } else if(stList[i].c>stList[i].b) { //タレ? if(ccount<n-k) { //タレ sum+=stList[i].c; ccount++; } else { //塩 sum+=stList[i].b; bcount++; } } else { //どっちも一緒 sum+=stList[i].b; } //共通 sum+=stList[i].a; } printf("%lld\n",sum); return 0; }