diff options
| author | 冯昶 <seaker@qq.com> | 2020-08-25 14:02:24 +0800 |
|---|---|---|
| committer | 冯昶 <seaker@qq.com> | 2020-08-25 14:02:24 +0800 |
| commit | ec9e40b0acf8571ff15678cddd4f19eded756e72 (patch) | |
| tree | b17ef3f9f3664e265fee053a3a818203e60d0bc2 /challenge-074/walt-mankowski/cpp | |
| parent | c78c938183297e7e8f494dd4a59fe82494f42774 (diff) | |
| parent | fd1f031ae79f262a59491231fb638176af79f92f (diff) | |
| download | perlweeklychallenge-club-ec9e40b0acf8571ff15678cddd4f19eded756e72.tar.gz perlweeklychallenge-club-ec9e40b0acf8571ff15678cddd4f19eded756e72.tar.bz2 perlweeklychallenge-club-ec9e40b0acf8571ff15678cddd4f19eded756e72.zip | |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'challenge-074/walt-mankowski/cpp')
| -rw-r--r-- | challenge-074/walt-mankowski/cpp/Makefile | 23 | ||||
| -rw-r--r-- | challenge-074/walt-mankowski/cpp/ch-1.cpp | 24 | ||||
| -rw-r--r-- | challenge-074/walt-mankowski/cpp/ch-2.cpp | 36 |
3 files changed, 83 insertions, 0 deletions
diff --git a/challenge-074/walt-mankowski/cpp/Makefile b/challenge-074/walt-mankowski/cpp/Makefile new file mode 100644 index 0000000000..0192513d07 --- /dev/null +++ b/challenge-074/walt-mankowski/cpp/Makefile @@ -0,0 +1,23 @@ +CPP = /usr/bin/c++ +INCLDIRS = +LIBDIRS = +LIBS = +CFLAGS = -std=c++17 -Wall -O3 $(INCLDIRS) +OBJECTS1 = ch-1.o +OBJECTS2 = ch-2.o + +all: ch-1 ch-2 + +%.o: %.cpp + $(CPP) $(CFLAGS) -c $< + +ch-1: $(OBJECTS1) + $(CPP) -o $@ $(OBJECTS1) $(LIBDIRS) $(LIBS) + +ch-2: $(OBJECTS2) + $(CPP) -o $@ $(OBJECTS2) $(LIBDIRS) $(LIBS) + +clean: + rm -f *~ + rm -f *.o + rm -f ch-1 ch-2 diff --git a/challenge-074/walt-mankowski/cpp/ch-1.cpp b/challenge-074/walt-mankowski/cpp/ch-1.cpp new file mode 100644 index 0000000000..ebb0563a3a --- /dev/null +++ b/challenge-074/walt-mankowski/cpp/ch-1.cpp @@ -0,0 +1,24 @@ +#include <stdlib.h> +#include <iostream> +#include <map> + +using namespace std; + +int main(int argc, char *argv[]) { + int target = (argc-1) / 2; + int result = -1; + map<int,int> cnt; + + for (int i = 1; i < argc; i++) { + int x = atoi(argv[i]); + if (++cnt[x] > target) { + result = x; + break; + } + } + + cout << result << endl; +} + + + diff --git a/challenge-074/walt-mankowski/cpp/ch-2.cpp b/challenge-074/walt-mankowski/cpp/ch-2.cpp new file mode 100644 index 0000000000..ab8b330e19 --- /dev/null +++ b/challenge-074/walt-mankowski/cpp/ch-2.cpp @@ -0,0 +1,36 @@ +#include <string> +#include <iostream> +#include <map> +#include <list> + +using namespace std; + +int main(int argc, char *argv[]) { + const string s(argv[1]); + string out = string(s.length(), ' '); + map<char,list<char>::const_iterator> seen; + list<char> nr; + + for (size_t i = 0; i < s.length(); i++) { + const char c = s[i]; + + // have we seen c before? + if (seen.find(c) == seen.end()) { + nr.push_front(c); + seen[c] = nr.cbegin(); + } else { + // remove c from nr + if (seen[c] != nr.end()) { + nr.erase(seen[c]); + seen[c] = nr.end(); + } + } + + // now the FNR is either the last element of nr, or # + if (nr.empty()) + out[i] = '#'; + else + out[i] = *(nr.cbegin()); + } + cout << out << endl; +} |
