は使用:
#include <stdio.h>
void fastRead(size_t *a);
void fastWrite(size_t a);
inline void fastRead(size_t *a)
{
int c=0;
// note: 32 is space character
// consume leading trash
while (c<33) c=getchar_unlocked();
// initialize result value
*a=0;
// punctuation parens, etc are show stoppers
while (c>47 && c <58)
{ // then in range 0...9
*a = (*a)*10 + (size_t)(c-48);
c=getchar_unlocked();
}
//printf("%s, value: %lu\n", __func__, *a);
} // end function: fastRead
inline void fastWrite(size_t a)
{
char snum[20];
//printf("%s, %lu\n", __func__, a);
int i=0;
// decompose 'a' into char array
do
{
// 48 is numeric character 0
snum[i++] = (char)((a%10)+(size_t)48);
a=a/10;
}while(a>0);
i=i-1; // correction for overincrement from prior 'while' loop
while(i>=0)
{
putchar_unlocked(snum[i--]);
}
putchar_unlocked('\n');
} // end function: fastWrite
上記の2つの機能に加えて、これらの機能を使用する典型的なプログラムを次に示します。
#define MAX_VALUE (1000000)
int array[ MAX_VALUE +1 ];
int main(void)
{
// get number of test cases
size_t numTestCases;
fastRead(&numTestCase);
//scanf("%lu", &numTestCases);
//printf("%s, Number of Test Cases: %lu\n", __func__, numTestCases);
// accumulate test cases, sorted
for(size_t i=0; i<numTestCases; i++)
{
size_t value;
fastRead(&value);
//scanf("%lu", &value);
array[value]++;
}
// output the unique values, assending
for(size_t i=0; i<MAX_VALUE; i++)
{
if(array[i])
{
fastWrite(i);
//printf("%s. %lu\n", __func__, i);
}
}
return 0;
}
(printfとscanfではなく)fastRead関数とfastWrite関数は、コードを大幅に高速化します。
これで、問題セットを実装するだけで済みます。
注:文字列を読み込むために:あなたは同じように、他のいくつかのストリング区切り文字を使用することができ
size_t i = 0;
while(i < sizeof(inputArray) && (ch = getchar_unlocked()) && ' ' != ch)
{
inputArray[i] = ch;
i++;
}
inputArray[i] = '\0';
を '\ n' のではなく、 ''
'のscanf("%の[^ \ n個]); ' - >' scanf( "%99 [^ \ n]%* c"、work); ' – BLUEPIXY
このコーデックの問題のスピードは強く考慮する必要があります。 (1秒未満)出力は、(テストケースごとに)単一の数字で、その後に改行(およびプログラムの最後に改行が続きます。投稿コード1)は問題のセットを実装しません。 2)正しい値も正しい形式も出力されません。3)は異なる 'アクティビティ'を許さない4)負の値は含まれていないので、すべての変数は問題集合ごとに 'int' – user3629249
ではなく' size_t'である可能性があります。 – user3629249