11340 - Newspaper

All about problems in Volume CXIII. If there is a thread about your problem, please use it. If not, create one with its number in the subject.

Moderator: Board moderators

11340 - Newspaper

Postby H_Hima » Sun Nov 11, 2007 5:33 pm

what the trick in this Problem.

this is my code in the contest?
I'm aware of space char and the final value too.
and got the res in long long.

I'm completely confused...

Code: Select all
woooooowh
what a great trick.
Got acc after that.

Thanks alot
Last edited by H_Hima on Mon Nov 12, 2007 8:45 am, edited 2 times in total.
H_Hima
New poster
 
Posts: 18
Joined: Mon Sep 25, 2006 10:56 am
Location: Solar System

Postby Robert Gerbicz » Sun Nov 11, 2007 6:18 pm

My c code is similar to your approach. I don't know the trick but it should be really crazy. On the contest: there were 384 submissions for this problem but only 45 AC.
Robert Gerbicz
Experienced poster
 
Posts: 196
Joined: Wed May 02, 2007 10:12 pm
Location: Hungary, Pest county, Halasztelek

Postby rio » Sun Nov 11, 2007 6:53 pm

Finally figured out the trick after 20 few submissions..

Character code has range 0 ~ 255, so use unsigned char.
(Is the spoiler ? :wink:)
----
Rio
User avatar
rio
A great helper
 
Posts: 385
Joined: Thu Sep 21, 2006 5:01 pm
Location: Kyoto, Japan

Postby armansuleimenov » Sun Nov 11, 2007 8:01 pm

I used stl map, got TLE, now switched to simple hash table, got WA 3 times. what is wrong with my code?

Code: Select all
thanx all, got AC
Last edited by armansuleimenov on Tue Nov 13, 2007 6:05 am, edited 1 time in total.
armansuleimenov
New poster
 
Posts: 15
Joined: Tue Sep 25, 2007 3:07 am
Location: Astana, Kazakhstan

Postby Robert Gerbicz » Sun Nov 11, 2007 8:01 pm

rio wrote:Character code has range 0 ~ 255, so use unsigned char.
(Is the spoiler ? :wink:)
----
Rio


Thanks, that was my problem! Now got AC.
Robert Gerbicz
Experienced poster
 
Posts: 196
Joined: Wed May 02, 2007 10:12 pm
Location: Hungary, Pest county, Halasztelek

Postby saman_saadi » Sun Nov 11, 2007 8:57 pm

armansuleimenov wrote:I used stl map, got TLE, now switched to simple hash table, got WA 3 times. what is wrong with my code?


According to rio's statement:

rio wrote:Finally figured out the trick after 20 few submissions..

Character code has range 0 ~ 255, so use unsigned char.


Then you can't use string because:

typedef basic_string<char> string;

so each element of string is char (not unsigned char) and you must handle this.
User avatar
saman_saadi
New poster
 
Posts: 31
Joined: Sun Feb 25, 2007 6:33 pm
Location: Tehran

Postby armansuleimenov » Mon Nov 12, 2007 5:39 am

so each element of string is char (not unsigned char) and you must handle this.


What input routine should I use then?

I can't use the code below since the character can be whitespace (' '):
Code: Select all
ll cost;
unsigned char ch;
cin>>ch>>cost;
cnt[(int)ch]=cost;
armansuleimenov
New poster
 
Posts: 15
Joined: Tue Sep 25, 2007 3:07 am
Location: Astana, Kazakhstan

Postby armansuleimenov » Mon Nov 12, 2007 5:41 am

should I use 64-bit integer to store the value of cents?
armansuleimenov
New poster
 
Posts: 15
Joined: Tue Sep 25, 2007 3:07 am
Location: Astana, Kazakhstan

Easy Fix

Postby baodog » Mon Nov 12, 2007 7:25 am

Yes, you can read in char !! It just may be negative.

Simply add a constant !!! (128 or bigger)

Please, remove your code as good etiquette if you get ac.
baodog
Experienced poster
 
Posts: 197
Joined: Wed Jul 04, 2007 6:53 am

Re: Easy Fix

Postby saman_saadi » Mon Nov 12, 2007 9:11 am

baodog wrote:Yes, you can read in char !! It just may be negative.

Simply add a constant !!! (128 or bigger)

Please, remove your code as good etiquette if you get ac.


In the contest time they release a clarification:

Solution for each test case must be printed on a separate line.
I.e.
Code:
10.10$
10.11$


Each character value is non-negative and at most 1000 cents worth.


According to the clarification character value is non-negative but I didn't see any statement about the range of characters in the problem. I got AC with unsigned char and don't handle negative characters. Are you sure there are negative characters in the input? If input has negative characters and the range of characters is -128 <= x <= 127 then I got AC in the contest time! After the contest I only change char to unsigned char (according to rio's statement) and got AC.

We know the range of char is:
-128 <= x <= 127


You say we must add a value 128 or higher to char so we have:

0 <= x + 128 <= 255


It's obvious 255 can't fit on char and it fit on unsigned char.[/code]
Last edited by saman_saadi on Mon Nov 12, 2007 9:55 am, edited 3 times in total.
User avatar
saman_saadi
New poster
 
Posts: 31
Joined: Sun Feb 25, 2007 6:33 pm
Location: Tehran

Postby saman_saadi » Mon Nov 12, 2007 9:21 am

armansuleimenov wrote:What input routine should I use then?

I can't use the code below since the character can be whitespace (' '):


You can use cin.get() method:
Code: Select all

unsigned char ch = cin.get();



But you must notice cin.get() reads white spaces ('\t', '\r', '\n', ' ') and don't ignore them so you must be careful And according to clarification you can't use int for storing characters values.
Last edited by saman_saadi on Mon Nov 12, 2007 9:35 am, edited 1 time in total.
User avatar
saman_saadi
New poster
 
Posts: 31
Joined: Sun Feb 25, 2007 6:33 pm
Location: Tehran

Re

Postby Hojjat jafary » Mon Nov 12, 2007 9:31 am

char ch = 255;
ch is negative one !
but the clarification said that the character codes are non-negative.
then you can use only char.
Hojjat jafary
New poster
 
Posts: 10
Joined: Sun Sep 16, 2007 9:35 am

asd

Postby darkos32 » Mon Nov 12, 2007 11:09 am

how to used cin.get() ?
i used like this for input :

2
av
sd

Code: Select all

scanf("%d\n",&m);
long total = 0;
while(m--){
unsigned char ch;
ch = cin.get();
cout << ch;
int cht = (int) ch;
}



but it prints nothing..and how to check the newline ?

thanks.
darkos32
New poster
 
Posts: 27
Joined: Tue Jul 25, 2006 8:10 am
Location: Indonesia

Re: asd

Postby saman_saadi » Mon Nov 12, 2007 11:23 am

darkos32 wrote:how to used cin.get() ?
i used like this for input :

2
av
sd

Code: Select all

scanf("%d\n",&m);
long total = 0;
while(m--){
unsigned char ch;
ch = cin.get();
cout << ch;
int cht = (int) ch;
}



but it prints nothing..and how to check the newline ?

thanks.


I think you must use cin instead of scanf because cin buffer and scanf buffer are different.
input:

2
av
sd

Code: Select all
   int n, ch1, ch2;

   for (cin >> n; n--;)
   {
      cin.get();   //feeding new line character in cin >> n
      ch1 = cin.get();
      ch2 = cin.get();
      cout << (unsigned char)ch1 << (unsigned char)ch2 << endl;
   }


for checking new line character using below code:

Code: Select all
ch = cin.get();
if (ch == '\n')
{
.
.
.
}

but I think it's better to write:

Code: Select all
if (ch == '\n' || ch == '\r')


I change unsigned char to int (because cin.get() return int) and submit it again and I found that no negative character exist in input data.[/code]
User avatar
saman_saadi
New poster
 
Posts: 31
Joined: Sun Feb 25, 2007 6:33 pm
Location: Tehran

Postby Hojjat jafary » Mon Nov 12, 2007 11:36 am

another way is use gets( str_buff ) and use sscanf()
and cin.get( char );
Hojjat jafary
New poster
 
Posts: 10
Joined: Sun Sep 16, 2007 9:35 am

Next

Return to Volume CXIII

Who is online

Users browsing this forum: No registered users and 1 guest

cron