×

Author: Praveen Dhinwa
Tester: Kevin Atienza
Translators: Sergey Kulik (Russian), Team VNOI (Vietnamese) and Hu Zecong (Mandarin)
Editorialist: Kevin Atienza

Cakewalk

# PREREQUISITES:

Loops, integer division

# PROBLEM:

Given the history of a user's activities in CodeChef and other relevant information regarding the new Laddu Accrual System, how many months can he/she redeem laddus?

# EXPLANATION:

This is the easiest problem in the contest. A straightforward implementation will do. The idea is to first count the amount of laddus the user has accumulated, and then simply divide by $200$ or $400$, depending on the origin.

Here are sample implementations.

C++:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
int cases;
cin >> cases;
while (cases--) {
int activities, points = 0;
string origin;
cin >> activities >> origin;
while (activities--) {
string kind;
cin >> kind;
if (kind == "CONTEST_WON") {
int rank;
cin >> rank;
int bonus = max(0, 20 - rank);
points += 300 + bonus;
} else if (kind == "TOP_CONTRIBUTOR") {
points += 300;
} else if (kind == "BUG_FOUND") {
int severity;
cin >> severity;
points += severity;
} else if (kind == "CONTEST_HOSTED") {
points += 50;
}
}
cout << points / (origin == "INDIAN" ? 200 : 400) << endl;
}
}


Python:

for cas in xrange(input()):
n, origin = raw_input().strip().split()
points = 0
for i in xrange(int(n)):
data = raw_input().strip().split()
kind = data[0]
if kind == 'CONTEST_WON':
rank = int(data[1])
bonus = max(0, 20 - rank)
points += 300 + bonus
elif kind == 'TOP_CONTRIBUTOR':
points += 300
elif kind == 'BUG_FOUND':
severity = int(data[1])
points += severity
elif kind == 'CONTEST_HOSTED':
points += 50

print points / (200 if origin == 'INDIAN' else 400)


# Common mistakes

Being the easiest one, this attracts the most number of participants, and probably also the most number of mistakes. Here are the ones I found while looking at incorrect answers:

• Opening a file. This causes "Time Limit Exceeded" or "Wrong Answer". Remember that input is taken from stdin, and output should be written in stdout. No file input/output should be done. If you want to test your code locally using a file, use redirection, e.g. my_program < my_input_file > my_output_file which means "Run my_program with input from my_input_file, and write the output in my_output_file".
• Printing unnecessary output. Remember that your answer will only get accepted if it exactly matches the intended output, character by character. So please don't print anything like Enter the number of test cases:, because that is a part of the output. If you want to print auxiliary code, print to stderr instead, but don't overdo it, otherwise you might get "Time Limit Exceeded" or "Output Limit Exceeded".
• Some common coding errors, like writing laddus = 300 instead of laddus += 300.
• Problems with "Bonus" computation, like forgetting that bonus = 0 when rank > 20, or forgetting to add 300 if rank > 20.
• Not allocating enough bytes for strings in languages with picky string input, like C. It's generally a good idea to allocate more than needed, e.g. even though the longest string is TOP_CONTRIBUTOR which has 15 characters, you should allocate, say, 21 (or even 100) characters just to be safe.
• Incorrectly reading the input. One example I found is forgetting that activities and origin are found in the same line. You should pay careful attention to the input format.

These mistakes are typical when you're still just starting programming, and programming contests. If you didn't get accepted, don't worry! Everyone starts somewhere, and I'm sure with more practice you'll encounter these problems less often.

# Time Complexity:

$O(\text{activities})$

# AUTHOR'S AND TESTER'S SOLUTIONS:

This question is marked "community wiki".

1.7k586142
accept rate: 11%

 0 I am unable to submit my solution. There seems to be a bug in the service. Can you please help? answered 19 May '16, 13:50 2★pes08 16●4 accept rate: 0%

# include<cstring>

using namespace std; int main() { int t; cin>>t; for(int i=0;i<t;i++) {="" int="" n,tot="0,months;" string="" s;="" cin="">>n>>s; for(int j=0;j<n;j++) {="" string="" activity;="" int="" amt="0;" cin="">>activity; if(activity=="CONTEST_WON") { int rank; cin>>rank; if(rank<20) amt=300+20-rank; else amt=300;

            }
else if(activity=="TOP_CONTRIBUTOR")
amt=300;
else if(activity=="BUG_FOUND")
{int sev;
cin>>sev;
amt=sev;
}
else
amt=50;
tot=tot+amt;

}

if(s=="INDIAN")
months=tot/200;
else
months=tot/400;
cout<<months;

cout<<"\n";
}


return 0; }

1
accept rate: 0%

 0 https://www.codechef.com/viewsolution/10579515.My code is giving the exact output required in the correct format.Kindly look into this @admin answered 23 Jun '16, 15:05 1●1●2 accept rate: 0%

What is wrong with this code:

# include<stdio.h>

int main(){ int t,i,a,j,l,m; char o[20],act[20]; scanf("%d",&t); for(i=1;i<=t;i++){ l=0; scanf("%d %s",&a,&o); for(i=1;i<=a;i++){ scanf("%s",&act); if(strcmp(act,"CONTEST_WON")==0){ int rank; scanf("%d",&rank); if(rank>20){ l=l+300; } else{ l=l+300+20-rank; } } if(strcmp(act,"TOP_CONTRIBUTOR")==0){ l=l+300; } if(strcmp(act,"BUG_FOUND")==0){ int sev; scanf("%d",&sev); l=l+sev; } if(strcmp(act,"CONTEST_HOSTED")==0){ l=l+50; }

}
if(strcmp(o,"INDIAN")==0){
m=l/200;
}
else{
m=l/400;
}
printf("%d\n",m);


} return 0; }

1★sm3so
1
accept rate: 0%

 0 i think the complexity would be O(n2) as thr are two while loops one of test cases and other of activities answered 27 May '17, 12:56 2★k1941996 1 accept rate: 0% It is written for one test case. (27 May '17, 14:13)
 toggle preview community wiki:
Preview

By Email:

Markdown Basics

• *italic* or _italic_
• **bold** or __bold__
• image?![alt text](/path/img.jpg "title")
• numbered list: 1. Foo 2. Bar
• to add a line break simply add two spaces to where you would like the new line to be.
• basic HTML tags are also supported
• mathemetical formulas in Latex between \$ symbol

Question tags:

×15,852
×1,688
×141
×45
×4

question asked: 16 May '16, 02:31

question was seen: 4,663 times

last updated: 27 May '17, 14:13