Presentation is loading. Please wait.

Presentation is loading. Please wait.

ACM notes Can work on the problems anytime throughout the term Contest conflict -- The GRE subject test is Nov. 10th! int x; while (cin >> x) { cout <<

Similar presentations


Presentation on theme: "ACM notes Can work on the problems anytime throughout the term Contest conflict -- The GRE subject test is Nov. 10th! int x; while (cin >> x) { cout <<"— Presentation transcript:

1 ACM notes Can work on the problems anytime throughout the term Contest conflict -- The GRE subject test is Nov. 10th! int x; while (cin >> x) { cout << ( (x%9) ? (x%9) : 9 ); } Digroot “problem”

2 ACM “style” while (nlines-- > 0) { queue q; string s; getline(cin, s); for (int i = 0; s[i]; i++) { if (!q.empty() && s[i] == q.front()) { // found q.pop(); } else { q.push(s[i]); if (q.size() > 10) { cout << "Not consistent with the theory\n"; goto done; } if (q.empty()) cout << "An echo string with buffer size ten\n"; else cout << "Not an echo string, but still consistent with the theory\n"; done: ; } Echo problem

3 Storing results in tables “dynamic programming”... Find the number of prime factors in N! (1 is not prime.) 2345678 www.cs.hmc.edu/ACM/

4 Other problems Change counting input: 1.00 0.06 0 output: There are 292 ways to make $1.00 There are 2 ways to make $0.06 Sigma series input: 3 4 87 99 output: 1 2 3 1 2 4 1 2 4 8 16 24 28 29 58 87 1 2 4 8 16 32 33 66 99 What?

5 Other problems Change counting input: 1.00 0.06 0 output: There are 292 ways to make $1.00 There are 2 ways to make $0.06 Sigma series input: 3 4 87 99 output: 1 2 3 1 2 4 1 2 4 8 16 24 28 29 58 87 1 2 4 8 16 32 33 66 99 Shortest sequences from 1 to N such that each element is the sum of two previous elements.

6 C++ STL vector v; // basically an int array v.reserve(10); // assure 10 spots v.push_back(42); // adds 42 to the end v.back(); // returns 42 v.pop_back(); // removes 42 v.size(); // # of elements v[i]; // ith element sort( v.begin(), v.end() ); // default sort sort( v.begin(), v.end(), mycompare ); deque d; // double-ended queue d.push_front(42); // add to front d.front(42); // return front element d.push_front(42); // remove from front sort #include vector #include deque #include last time www.dinkumware.com/htm_cpl/index.htmlwww.sgi.com/tech/stl/

7 Useful C functions int atoi(char* s); double atof(char* s); int strcasecomp(char* s1, char* s2); long strtol(char* s, NULL, int base) strtol(“Charlie”, NULL, 36) == 2147483647L converts C strings to ints atoi(“100”) == 100 converts C strings to doubles atoi(“100.0”) == 100.0 case-insensitive C string comparison strcasecmp(“aCm”,“ACm”) == 0 arbitrary conversion from a string in bases (2-36) to a long int use man for more...

8 sprintf int sprintf(char* str, char* format,...); prints anything to the string str char str[100]; sprintf(str,“%d”,42); // str is “42” sprintf(str,“%f”,42.0); // str is “42.0” sprintf(str,“%10d”,42); // str is “ 42” sprintf(str,“%-10d”,42); // str is “42 ” flexible formatting: right/left justify:

9 A chance to “improve” your C/C++ … Preparation for the ACM competition... Problem Insight and Execution... Get into the minds of the judges Anxiety! 1 2 Two ACM programming skills

10 Get into the minds of the judges Key Skill #1: mindreading “What cases should I handle?” spectrum 100% 0%

11 Key Skill #2: anxiety Anxiety!

12 Dynamic Programming Strategy: create a table of partial results & build on it. divis.cc T(n) = T(3n+1) + 1 if n odd T(n) = number of steps yet to go T(n) = T(n/2) + 1 if n even

13 Dynamic Programming Keys: create a table of partial results, articulate what each table cell means, then build it up... divis.cc 0123456 0 1 2 T[i][j] is 1 if i is a possible remainder using the first j items in the list. Table T 3 j = items considered so far i = possible remainder 1 1 6 2 -3 the list the divisor 4

14 Dynamic programs can be short #include vector v(10000); vector m(100); // old mods vector m2(100); // new mods int n, k; bool divisible() { fill(m.begin(),m.end(),false); m[0] = true; for (int i=0; i<n; i++) { /* not giving away all of the code */ /* here the table is built (6 lines) */ } return m[0]; } int main() { cin >> n; // garbage while (cin >> n) { cin >> k; for (int i=0; i<n; i++) { cin >> v[i]; v[i] = abs(v[i]); v[i] %= k; } cout << (divisible() ? "D" : "Not d") << "ivisible\n"; } cout << endl; } acknowledgment: Matt Brubeck STL: http://www.sgi.com/Technology/STL

15 General ACM Programming Try brute force first (or at least consider it) -- sometimes it will work fine… -- sometimes it will take a _bit_ too long -- sometimes it will take _way_ too long for (int j=1 ; j<N ; ++j) { cin >> Array[i]; } Table[i + n % k] = 1; Table[i - n % k] = 1; filling in the table in the “divis” problem:getting the input in the “pea” problem: Best bugs from last week:

16 New Problem Input A list of words Word Chains Output yes or no -- can these words be chained together such that the last letter of one is the first letter of the next… ? doze aplomb ceded dozen envy ballistic yearn hertz jazz hajj zeroth

17 Knapsack Problem 01234 1 2 3 V(n,w) = max value stealable w/ ‘n’ objects & ‘w’ weight V(n,w) = object wt. val. 1 3 8 2 2 5 3 1 1 4 2 5 Maximize loot w/ weight limit of 4. 4 Number of objects considered Weight available for use n w

18 C Output printf, fprintf, sprintf(char* s, const char* format, …) the destinationthe format string the values h.412-#0%d start character flags - left-justify 0 pad w/ zeros + use sign (+ or -) (space) use sign ( or -) # deviant operation minimum field width precision size modifier h short l long (lowercase L) L long double type d decimal integers u unsigned (decimal) ints o octal integers x hexadecimal integers f doubles (floats are cast) e doubles (exp. notation) g f or e, if exp < -3 or -4 c character s string n outputs # of chars written !! % two of these print a ‘%’ allowed size modifiers possible format strings

19 C Output %10.4d value = 42value = -42 0042 -0042 %-#12x 0x2a0xffffffd6 %+10.4g +42 -42.42 value = 42value = -42.419 %- 10.4g 42-42.42 %-#10.4g 42.00-42.42 value = “forty-two” %10.5s forty


Download ppt "ACM notes Can work on the problems anytime throughout the term Contest conflict -- The GRE subject test is Nov. 10th! int x; while (cin >> x) { cout <<"

Similar presentations


Ads by Google