2015-04-04 2 views
0

Я пытаюсь получить представление о проблемах корзины с золотыми монетами в реальном архиве ACM-ICPC (https://icpcarchive.ecs.baylor.edu) номер проблемы: 3576 Я написал код, и он дал правильный ответ, но когда я попытался представить его на веб-сайте, он не принял его (ограничение по времени превысило ошибку) Дело в том, что не возможно, что программа займет более 3 минут это очень простая программа вопрос не сказать, сколько раз я должен получить вход , поэтому мне пришлось использовать цикл, но я не знаю, когда закончится его это код, который я написалвопросов, которые не имеют определенного количества входных тестов на ACM

#include <stdio.h> 
 

 
int n,w,d,weight; 
 
int search(); 
 

 
int main(){ 
 
\t scanf("%d %d %d %d",&n,&w,&d,&weight); 
 
\t while((n>1 && n<=8000) && (0<w && w<=30) && (d<w)){ 
 
\t \t printf("%d\n",search()); 
 
\t \t scanf("%d %d %d %d",&n,&w,&d,&weight); 
 
\t } 
 
\t return 0; 
 
} 
 

 
int search(){ 
 
\t int \t N=n-1; 
 
\t int sum = N*(N + 1)/2; 
 
\t if(weight == sum){ 
 
\t \t return n; 
 
\t } 
 
\t else{ 
 
\t \t int \t sum1= sum*w; 
 
\t \t return (sum1-weight)/d; 
 
\t } 
 
}

я попробовал другие способы, как

while(scanf("%d %d %d %d",&n,&w,&d,&weight)) 
 
while(1) 
 
while(n!=EOF)

, но я был один и тот же ответ. Как я могу закончить цикл while, чтобы онлайн-судья принял код?

ответ

0

Для проблем, которые не имеют точного количества тестовых примеров, вы должны прочитать ввод до EOF (конец файла).

Поскольку вы используете C, функция зсапа возвращает количество значений успешно считана и присвоено, так что вы можете просто держать чтение блоков из 4-х цифр:

while(scanf("%d %d %d %d",&n,&w,&d,&weight) == 4){ 
    printf("%d\n",search()); 
} 

Еще одна хитрости заключается в использовании времени цикла чтобы продолжить считывание первого номера/символа ввода, а затем прочитать остальную часть внутри цикла:

while(scanf("%d", &n) == 1){ 
    scanf("%d %d %d", &w, &d, &weight); 
    printf("%d\n",search()); 
} 
Смежные вопросы