結果
| 問題 |
No.4 おもりと天秤
|
| コンテスト | |
| ユーザー |
C_kumo
|
| 提出日時 | 2019-01-19 01:10:20 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,372 bytes |
| コンパイル時間 | 466 ms |
| コンパイル使用メモリ | 30,336 KB |
| 実行使用メモリ | 8,604 KB |
| 最終ジャッジ日時 | 2024-07-07 06:06:50 |
| 合計ジャッジ時間 | 6,983 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 2 TLE * 1 -- * 20 |
ソースコード
#include <stdio.h>
#include <stdlib.h>
#define POS "possible"
#define IMP "impossible"
void iniUse(char n,char use[]);
char searchSum(char n,char w[],char use[],short sum,short tmpS);
int compare(const void *a, const void *b)
{
return *(char *)a - *(char *)b;
}
int main(void)
{
char n,i;
char *w,*use;
char ret;
short sum;
scanf("%hhd",&n);
w = (char *)malloc(sizeof(char) * n);
sum = 0;
for (i=0;i<n;i++) {
scanf("%hhd",&w[i]);
sum += w[i];
}
// check even
if (sum % 2 == 1) {
printf("%s\n",IMP);
return 0;
}
sum /= 2;
// sort to ascending
qsort(w,n,sizeof(char),compare);
// check large
if (w[n-1] > sum) {
printf("%s\n",IMP);
return 0;
}
// search
use = (char *)malloc(sizeof(char) * n);
iniUse(n,use);
ret = searchSum(n,w,use,sum,0);
if (ret == 1) {
printf("%s\n",POS);
} else printf("%s\n",IMP);
return 0;
}
void iniUse(char n,char use[])
{
char i;
for (i=0;i<n;i++) use[i] = 0;
return;
}
char searchSum(char n,char w[],char use[],short sum,short tmpS)
{
char i;
char ret;
short tmp;
/*
printf("use= ");
for (i=0;i<n;i++) printf("%hhd ",use[i]);
printf("\n");
*/
for (i=n-1;i>=0;i--) {
if (use[i] == 1) continue;
tmp = tmpS + w[i];
if (tmp > sum) continue;
use[i] = 1;
if (tmp == sum) return 1;
ret = searchSum(n,w,use,sum,tmp);
if (ret == 1) return 1;
use[i] = 0;
}
return 0;
}
C_kumo