結果
| 問題 |
No.2852 Yakitori Optimization Problem
|
| コンテスト | |
| ユーザー |
nekoti
|
| 提出日時 | 2024-08-25 14:23:19 |
| 言語 | C (gcc 13.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 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 17 |
ソースコード
#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;
}
nekoti