Page 1 of 3

10025 - The ? 1 ? 2 ? ... ? n = k problem

Posted: Wed Jun 12, 2002 7:30 pm
by Cubist
The problem description doesn't say that the first input is the number
of items to process! Please fix this!

-Chris

Posted: Wed Jun 12, 2002 7:48 pm
by arnsfelt
Calm down, - the problem is clearly marked as being multiple input by a blue checkmark.

Doh!

Posted: Wed Jun 12, 2002 11:20 pm
by Cubist
Many apologies - I'm new here, and hadn't realized the multiple input
condition at all! It'd be nice if this was mentioned in the problems
themselves, e.g. Note: multiple input (with link to the page describing
the multiple input condition). It's certainly a small thing, but it would
save people from wasting time, and all the input/output conditions would
be in the actual problem description. :roll:

-Chris

10025

Posted: Wed Nov 20, 2002 3:11 am
by yan4546
Can you tell me if the following input and output datas are right?

Thank you!

Input Output
-----------------------------------------
1000000000 44723
43562436 9335
-235344 687
0 3
234387 685
------------------------------------------

Can you send some of your datas to me ?

Bye!

10025

Posted: Sun Nov 24, 2002 4:51 pm
by stcheung
Okay I have fixed 2 major bugs: (1)realizing multiple input and (2)recognizing output=3 for input=3. But I still get WA...any help folks?

[cpp]

#include <iostream.h>
#include <stdlib.h>
#include <math.h>

int main()
{
int numcases;
cin >> numcases;
for(int i=0; i<numcases; i++)
{
unsigned number, temp;
double root;
unsigned root2;
cin >> number;
number = abs(number);
if(number == 0)
root2 = 3;
else if(number == 1)
root2 = 1;
else
{
temp = 2 * number;
root = sqrt(temp);
root2 = (root == (int)root) ? (int)root : (int)root+1;
while(true)
{
if((root2*(root2+1)/2 - number)%2 == 0)
break;
root2++;
}
}
cout << root2 << "\n";
}
return 0;
}[/cpp]

Posted: Mon Dec 09, 2002 2:00 pm
by szymcio2001
Input Output
-----------------------------------------
1000000000 44723
43562436 9335
-235344 687
0 3
234387 685
------------------------------------------

This output is correct. If you get WA, maybe you don't consider the multiple input.

Posted: Wed Dec 25, 2002 3:06 pm
by Astrakan
Your program doesn't produce the correct output for k=3. Output should be 2 (1+2 = 3) but your program answered 5 when I tried it.

Posted: Thu Dec 26, 2002 4:41 am
by stcheung
Incredible thanks. Turns out my program doesn't work not only for input=3, but for input=any triangular number (3, 6, 10, 15...).
Writing test cases is a skill I need to master.

Posted: Wed Jan 15, 2003 7:01 pm
by pc5971
I solved the problem and it works for all inputs that I can find (here or in the problem...) but I still receive WA. Can you tell what can be wrong?


Carmen

Posted: Thu Jan 16, 2003 11:36 am
by pc5971
I solved the problem and it works for all inputs that I can find (in board or in the problem...) but I still receive WA. Can you tell what can be wrong?

[c]
deleted
[/c]

Posted: Thu Jan 16, 2003 11:48 am
by Astrakan
It's a multiple input problem (blue check mark). You should read http://acm.uva.es/problemset/minput.html to find out what the input and output should look like. The first line of input contains the number of cases, and there should be a blank line between each output case.

Posted: Thu Jan 16, 2003 2:11 pm
by pc5971
That was so useful hint for me. Thanks a lot because I was sure that the algorithm it's Ok but . . .

I was accepted now

10025

Posted: Mon Jan 20, 2003 3:15 pm
by 25258FM
[cpp]
#include <iostream.h>
#include <stdio.h>
void main(void){
int number,i,base,different,state;

while(1)
{

i=0;
base=0;
state=0;

cin>>number;
if (feof(stdin)) break;
if (number < 0)
number=-number;
while(1)
{
i++;
base+=i;
if (base>=number)
{
different=base-number;
if ((different==0)||(different % 2==0))
{
break;
}
}


}
if (number==0)
cout<<3<<endl;
else
{
cout<<i<<endl;
}
}
}

[/cpp]
i get a WA, pls help help me....

Posted: Tue Jan 21, 2003 5:27 am
by eloha
pc5971 wrote:I was sure that the algorithm it's Ok
Can you show me how does your algorithm work?
My math is not good. Thanks.

Posted: Tue Jan 21, 2003 8:05 am
by pc5971
I deleted the code, I think you can understend why... but I'll try to explain my algorithm...

1. You find the smallest n in that way that

1+2+...+n >= s (where s is the input)

For this you have to solve the equation in n:
n^2 + n 0 2s = 0
=> n= ceil( (sqrt(1+8s) -1)/2 )

2. Now your solution is n or n+1 or n+2, because
d=s-n*(n+1)/2 must be (even or odd I don't know very well english so I'm always in doubt wich is the word but ) d mod 2=0...



Good luck,

Carmen