1 / 19

ACM notes

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

kioko
Download Presentation

ACM notes

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. ACM “style” while (nlines-- > 0) { queue<char> 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 www.cs.hmc.edu/ACM/ “dynamic programming” Find the number of prime factors in N! (1 is not prime.) ... 2 3 4 5 6 7 8 ...

  4. Other problems • Change counting input: output: 1.00 0.06 0 There are 292 ways to make $1.00 There are 2 ways to make $0.06 • Sigma series What? input: output: 3 4 87 99 -1 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

  5. Other problems • Change counting input: output: 1.00 0.06 0 There are 292 ways to make $1.00 There are 2 ways to make $0.06 • Sigma series Shortest sequences from 1 to N such that each element is the sum of two previous elements. input: output: 3 4 87 99 -1 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

  6. C++ STL www.dinkumware.com/htm_cpl/index.html www.sgi.com/tech/stl/ vector<int> 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<int> d; // double-ended queue d.push_front(42); // add to front d.front(42); // return front element d.push_front(42); // remove from front vector #include <vector> sort #include <algorithm> last time deque #include <deque>

  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) 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 strtol(“Charlie”, NULL, 36)== 2147483647L 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. Two ACM programming skills A chance to “improve” your C/C++ … Preparation for the ACM competition ... Problem Insight and Execution ... 2 1 Anxiety! Get into the minds of the judges

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

  11. Key Skill #2: anxiety Anxiety!

  12. Dynamic Programming Strategy: create a table of partial results & build on it. divis.cc T(n) = number of steps yet to go T(n) = T(3n+1) + 1 if n odd 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 j = items considered so far Table T 0 1 2 3 4 5 6 1 1 6 2 -3 0 the list 1 4 i = possible remainder the divisor 2 3 T[i][j] is 1 if i is a possible remainder using the first j items in the list.

  14. Dynamic programs can be short #include <cstdio> #include <iostream> #include <vector> vector<int> v(10000); vector<bool> m(100); // old mods vector<bool> 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 Best bugs from last week: getting the input in the “pea” problem: filling in the table in the “divis” problem: for (int j=1 ; j<N ; ++j) { cin >> Array[i]; } Table[i + n % k] = 1; Table[i - n % k] = 1;

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

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

  18. C Output printf, fprintf, sprintf(char* s, const char* format, …) the destination the format string the values possible format strings h % -#0 12 .4 d 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 ‘%’ type size modifier minimum field width precision allowed size modifiers flags - left-justify 0 pad w/ zeros + use sign (+ or -) (space) use sign ( or -) # deviant operation h short l long (lowercase L) L long double start character

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

More Related