からの質問ですSPOJ
小さなフェルーダはとても遊ぶのが好きです。ご存知のように、彼は数字だけで遊んでいます。したがって、彼には n 個の数字が与えられます。次に、それぞれが 2 つの数値を含む互いに素なコレクションに数値をグループ化しようとします。コレクション内の小さな数が大きな数のちょうど半分である場合、彼は 2 つの数を含むコレクションを形成できます。
n 個の数が与えられたとき、彼が形成できるコレクションの最大数を求めてください。
入力
T: テストケースの数。(1 <= T <= 100)。
各テスト ケースについて:
最初の行には n が含まれます: (1 <= n <= 100)
次に、次の行には、シングル スペースで区切られた n 個の数字が含まれます。各数値の範囲は 1 ~ 10^6 です。
出力
テスト ケースごとに、形成できるコレクションの最大数を出力します。
例
入力:
2
2
1 2
3
1 2 4
出力:
1
1
私のコード::
#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
int t;
scanf("%d", &t);
while (t--) {
int n, i, j;
scanf("%d", &n);
long int arr[n], mini, maxi;
char str[105];
for (i = 0;i < n;i++) {
str[i] = '0';
scanf("%ld", &arr[i]);
}
for (i = 0;i < n;i++) {
for (j = 0;j < n;j++) {
mini = fmin(arr[i], arr[j]);
maxi = fmax(arr[i], arr[j]);
if ((maxi == 2 * mini) && (str[i] == '0' && str[j] == '0')) {
str[i] = str[j] = '1';
break;
}
}
}
long int cnt = 0;
for (i = 0;i < n;i++) {
if (str[i] == '1') {
cnt++;
}
}
printf("%ld\n", cnt / 2);
}
return 0;
}
誰かが私が間違っている場所や、私が見逃している隅のテストケースを指摘できますか??