diff --git a/1002.cpp b/1002.cpp deleted file mode 100644 index bcfd479..0000000 --- a/1002.cpp +++ /dev/null @@ -1,45 +0,0 @@ -#include -#include -#include -#include - -#include -#include -#include -#include - -using namespace std; - -int main(int argc, char* argv[]) { - int n; - vector v1(1001, 0); - vector v2(1001, 0); - int k; - double a; - - scanf("%d", &n); - for(int i = 0; i < n; ++i) { - scanf("%d%lf", &k, &a); - v1[k] = a; - } - scanf("%d", &n); - for(int i = 0; i < n; ++i) { - scanf("%d%lf", &k, &a); - v2[k] = a; - } - int count = 0; - for(int i = 0; i <= 1000; ++i) { - v1[i] += v2[i]; - if(v1[i] != 0) - ++count; - } - printf("%d", count); - for(int i = 1000; count > 0 && i >= 0 ; --i) { - if(v1[i] == 0) - continue; - --count; - printf(" %d %.1f", i, v1[i]); - } - printf("\n"); - return 0; -} diff --git a/1003.cpp b/1003.cpp deleted file mode 100644 index 331c150..0000000 --- a/1003.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include -#include -#include - -#include -#include -#include -#include - -using namespace std; - -int main(int argc, char* argv[]) { - - return 0; -} diff --git a/1004.cpp b/1004.cpp deleted file mode 100644 index 331c150..0000000 --- a/1004.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include -#include -#include - -#include -#include -#include -#include - -using namespace std; - -int main(int argc, char* argv[]) { - - return 0; -} diff --git a/1034.cpp b/1034.cpp deleted file mode 100644 index 1e86448..0000000 --- a/1034.cpp +++ /dev/null @@ -1,152 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -//#define DEBUG - - -using namespace std; - -const int MINNUM = 2; -vector pre; -vector bingNum; - -class Record{ -public: - string a; - string b; - int weight; - Record(string tmp1, string tmp2, int tmp3):a(tmp1), b(tmp2), weight(tmp3){}; -}; - -class intRecord { -public: - int a; - int b; - intRecord(int tmp1, int tmp2):a(tmp1), b(tmp2){}; -}; - -class Gang{ -public: - string head; - int num; - Gang(string tmp1, int tmp2):head(tmp1), num(tmp2){}; -}; - -bool cmp(const Gang &lhs, const Gang &rhs) { - return lhs.head < rhs.head; -} - -int findRoot(int a) { - int cur = a; - while(cur != pre[cur]) { - cur = pre[cur]; - } - return cur; -} - -void merge(int a, int b) { - int ra = findRoot(a), rb = findRoot(b); - if(ra == rb) - return; - if(bingNum[ra] < bingNum[rb]) { - pre[ra] = rb; - } - else { - pre[rb] = ra; - if(bingNum[ra] == bingNum[rb]) - bingNum[ra]++; - } -} - - -int main(int argc, char *argv[]) { -#ifdef DEBUG - freopen("in.txt", "r", stdin); - freopen("out.txt", "w", stdout); -#else -#endif - int N, K; - scanf("%d%d", &N, &K); - vector records; - set s; - for(int i = 0; i < N; ++i) { - string tmp1, tmp2; - int tmp3; - cin >> tmp1 >> tmp2 >> tmp3; - records.push_back(Record(tmp1, tmp2, tmp3)); - s.insert(tmp1); - s.insert(tmp2); - } - map name2id; - map id2name; - int i = 0; - for(set::iterator iter = s.begin(); iter != s.end(); ++iter, ++i) { - name2id[ (*iter) ] = i; - id2name[ i ] = (*iter); - } - int num = s.size(); - vector gangW(num, 0); - vector intRecords; - - for(int i = 0; i < records.size(); ++i) { - int tmp1 = name2id[ records[i].a ], tmp2 = name2id[ records[i].b ]; - //if(tmp1 == tmp2) - // continue; - gangW[tmp1] += records[i].weight; - gangW[tmp2] += records[i].weight; - intRecords.push_back(intRecord(tmp1, tmp2)); - } - - // bing cha - for(int i = 0; i < num; ++i) - pre.push_back(i); - for(int i = 0; i < num; ++i) - bingNum.push_back(1); - - for(int i = 0; i < intRecords.size(); ++i) { - merge(intRecords[i].a, intRecords[i].b); - } - - map< int, vector > links; - set ids; - for(int i = 0; i < num; ++i) { - int id = findRoot(i); - links[ id ].push_back(i); - ids.insert( id ); - } - vector result; - for(set::iterator iter = ids.begin(); iter != ids.end(); ++iter) { - int id = *iter; - if(links[id].size() <= MINNUM) - continue; - int sum = 0; - for(int i = 0; i < links[id].size(); ++i) { - sum += gangW[ links[id][i] ]; - } - if(sum / 2 <= K) - continue; - int head = 0; - for(int i = 0; i < links[id].size(); ++i) { - if(gangW[ links[id][i] ] > gangW[ links[id][head] ]) { - head = i; - } - } - result.push_back( Gang( id2name[ links[id][head] ], links[id].size() ) ); - } - - sort(result.begin(), result.end(), cmp); - cout << result.size() << endl; - - for(int i = 0; i < result.size(); ++i) { - cout << result[i].head << " " << result[i].num << endl; - } - - - return 0; -} \ No newline at end of file diff --git a/1038.cpp b/1038.cpp deleted file mode 100644 index 668f4d2..0000000 --- a/1038.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include -#include -#include -#include -#include -#include - -using namespace std; - -bool cmp(const string &lhs, const string &rhs){ - string a = lhs, b = rhs; - a.append(rhs); - b.append(lhs); - return a < b; -} - -int main(int argc, char *argv) { -#ifndef ONLINE_JUDGE - freopen("in.txt", "r", stdin); - freopen("out.txt", "w", stdout); -#endif - - int n; - cin >> n; - vector v(n); - for(int i = 0; i < n; ++i) - cin >> v[i]; - sort(v.begin(), v.end(), cmp); - bool start = false; - for(int i = 0; i < v.size(); ++i) { - if(start) { - cout << v[i]; - } - else { - for(int j = 0; j < v[i].size(); ++j) { - if(start) { - cout << v[i][j]; - } - else if(!start && '0' != v[i][j]) { - start = true; - cout << v[i][j]; - } - } - } - } - if(!start) - cout << "0"; - cout << endl; - return 0; -} \ No newline at end of file diff --git a/1064.cpp b/1064.cpp deleted file mode 100644 index ffed15c..0000000 --- a/1064.cpp +++ /dev/null @@ -1,100 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -int f[20]; - -struct node { - int val; - node *left; - node *right; -}; - -int getRootPos(int n) { - if(0 == n) - return 0; - if(1 == n) - return 1; - - int height = 0; - int i = 0; - for(; i < 20; ++i) { - if(n < f[i]) - break; - } - height = i; - int remain = min( n - f[height - 1], (f[height] - f[height-1]) / 2 ); - return (f[height - 1] - 1) / 2 + remain + 1; -} - -node* getResult(const vector &v, int startPos, int endPos) { - int n = endPos - startPos + 1; - if(n <= 0) - return NULL; - int rootPos = getRootPos(n); - node* root = new node(); - root->val = v[ startPos + rootPos -1 ]; - root->left = getResult(v, startPos, startPos + rootPos - 2); - root->right = getResult(v, startPos + rootPos, endPos); - return root; -} - -void printTree(node *root) { - if(root == NULL) - return; - queue q; - vector v; - q.push(root); - while(q.size() != 0) { - v.push_back(q.front()->val); - if(NULL != q.front()->left) - q.push(q.front()->left); - if(NULL != q.front()->right) - q.push(q.front()->right); - q.pop(); - } - printf("%d", v[0]); - for(int i = 1; i < v.size(); ++i) { - printf(" %d", v[i]); - } - printf("\n"); -} - -int main(int argc, char *agrv[]) { - // 2 pow - int base = 1; - for(int i = 0; i < 20; ++i) { - f[i] = base; - base *= 2; - } - for(int i = 1; i < 20; ++i) { - f[i] += f[i-1]; - } - - // get input - int n; - scanf("%d", &n); - if(0 == n) - return 0; - - vector v(n); - for(int i = 0; i < n; ++i) { - scanf("%d", &v[i]); - } - - // - sort(v.begin(), v.end()); - vector result; - node *root = getResult(v, 0, v.size()-1); - - // print result; - printTree(root); - - return 0; -} \ No newline at end of file diff --git a/1070.cpp b/1070.cpp deleted file mode 100644 index 0f9bc19..0000000 --- a/1070.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include -#include -#include -#include -#include - -using namespace std; - -class Cake { -public: - double _weight; - double _price; - double _eps; -}; - -bool cmp(const Cake &lhs, const Cake &rhs) { - return lhs._eps > rhs._eps; -} - -int main(int argc, char *argv[]) { - int n, v; - scanf("%d%d", &n, &v); - vector cakes(n); - Cake tmp; - for(int i = 0; i < n; ++i) - scanf("%lf", &cakes[i]._weight); - for(int i = 0; i < n; ++i) - scanf("%lf", &cakes[i]._price); - vector fcakes; - for(int i = 0; i < n; ++i) { - if(cakes[i]._weight != 0 && cakes[i]._price != 0) { - cakes[i]._eps = cakes[i]._price / cakes[i]._weight; - fcakes.push_back(cakes[i]); - } - } - if(v == 0 || fcakes.size() == 0) { - printf("0.00\n"); - return 0; - } - sort(fcakes.begin(), fcakes.end(), cmp); - double result = 0; - for(int i = 0; i < fcakes.size(); ++i) { - if(0 == v) - break; - if(v >= fcakes[i]._weight) { - result += fcakes[i]._price; - v -= fcakes[i]._weight; - } - else { - result += fcakes[i]._price * 1.0 * v / fcakes[i]._weight; - v = 0; - } - } - printf("%.2f\n", result); - return 0; -} \ No newline at end of file diff --git a/1072.cpp b/1072.cpp deleted file mode 100644 index e816c8e..0000000 --- a/1072.cpp +++ /dev/null @@ -1,129 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -int N, M, K, D, NM; - -class Gas { -public: - double minimum; - double average; - int index; - bool operator < (const Gas &rhs) const { - if(minimum != rhs.minimum) - return minimum > rhs.minimum; - else { - if(average != rhs.average) - return average < rhs.average; - else { - return index < rhs.index; - } - } - } -}; - - -int string2int(string s) { - // M <= 10 - if('G' == s[0]) { - if(3 == s.size()) - return 10 + N; - else - return s[1] - '0' + N; - } - else { - stringstream ss; - ss << s; - int result; - ss >> result; - return result; - } -} - -int main(int argc, char *argv[]) { -#ifndef ONLINE_JUDGE - freopen("in.txt", "r", stdin); - freopen("out.txt", "w", stdout); -#endif - - cin >> N >> M >> K >> D; - NM = N + M; - vector< vector > w(NM + 1, vector(NM + 1, INT_MAX / 4) ); - for(int i = 1; i <= NM; ++i) - w[i][i] = 0; - for(int i = 0; i < K; ++i) { - string tmp1, tmp2; - int d, index1, index2; - cin >> tmp1 >> tmp2 >> d; - index1 = string2int(tmp1); - index2 = string2int(tmp2); - w[index1][index2] = d; - w[index2][index1] = d; - } - - if(N <= 0 || M <= 0) { - cout << "No Solution" << endl; - return 0; - } - - vector result; - - for(int gi = 1; gi <= M; ++gi) { - int gIndex = gi + N; - vector d(NM+1, INT_MAX / 4); - d[gIndex] = 0; - vector visited(NM+1, false); - for(int k = 1; k <= NM; ++k) { - int small = INT_MAX; - int smallIndex = -1; - for(int i = 1; i <= NM; ++i) { - if(!visited[i] && d[i] < small) { - small = d[i]; - smallIndex = i; - } - } - visited[smallIndex] = true; - for(int i = 1; i <= NM; ++i) { - d[i] = min(d[i], d[smallIndex] + w[smallIndex][i]); - } - } - - Gas tmp; - double tavrage = 0; - int tmin = INT_MAX; - bool unReach = false; - for(int i = 1; i <= N; ++i) { - if(d[i] > D) { - unReach = true; - break; - } - tmin = min(tmin, d[i]); - tavrage += d[i]; - } - if(!unReach) { - tmp.average = tavrage / N; - tmp.minimum = tmin; - tmp.index = gi; - result.push_back(tmp); - } - } - - - if(0 == result.size()) { - cout << "No Solution" << endl; - } - else { - sort(result.begin(), result.end()); - printf("G%d\n", result[0].index); - printf("%.1f %.1f\n", result[0].minimum, result[0].average); - } - - return 0; -} \ No newline at end of file diff --git a/1074.cpp b/1074.cpp deleted file mode 100644 index 6e17adb..0000000 --- a/1074.cpp +++ /dev/null @@ -1,67 +0,0 @@ -#include -#include -#include -#include -#include -#include - -using namespace std; - -class Node{ -public: - int adr; - int val; -}; - -int nexts[100000]; -int values[100000]; -vector v; - -int main(int argc, char *argv[]) { -#ifndef ONLINE_JUDGE - freopen("in.txt", "r", stdin); - freopen("out.txt", "w", stdout); -#endif - - int root, N, K; - scanf("%d%d%d", &root, &N, &K); - for(int i = 0; i < N; ++i) { - int cur, val, tmpNext; - scanf("%d%d%d", &cur, &val, &tmpNext); - nexts[cur] = tmpNext; - values[cur] = val; - } - int cur = root; - - while(-1 != cur) { - Node tmp; - tmp.adr = cur; - tmp.val = values[cur]; - v.push_back(tmp); - cur = nexts[cur]; - } - for(int i = 0; i < v.size(); i += K) { - if(i + K - 1 > v.size() - 1) { - for(int j = i; j < v.size() - 1; ++j) - printf("%05d %d %05d\n", v[j].adr, v[j].val, v[j+1].adr); - printf("%05d %d -1\n", v[v.size() - 1].adr, v[v.size() - 1].val); - } - else if(i + K - 1 == v.size() - 1) { - for(int j = v.size() - 1; j > i; --j) { - printf("%05d %d %05d\n", v[j].adr, v[j].val, v[j-1].adr); - } - printf("%05d %d -1\n", v[i].adr, v[i].val); - } - else { - for(int j = i + K - 1; j > i; --j) { - printf("%05d %d %05d\n", v[j].adr, v[j].val, v[j-1].adr); - } - if(i + 2 * K - 1 <= v.size() - 1) - printf("%05d %d %05d\n", v[i].adr, v[i].val, v[i + 2 * K - 1].adr); - else - printf("%05d %d %05d\n", v[i].adr, v[i].val, v[i + K].adr); - } - } - - return 0; -} \ No newline at end of file diff --git a/1075.cpp b/1075.cpp deleted file mode 100644 index 59cd8e3..0000000 --- a/1075.cpp +++ /dev/null @@ -1,122 +0,0 @@ -#include -#include -#include -#include -#include -#include - -using namespace std; - -class Student { -public: - int id; - vector p; - vector done; - int total; - int perfect; -}; - -bool cmp(const Student &lhs, const Student &rhs) { - if(lhs.total != rhs.total) { - return lhs.total > rhs.total; - } - else { - if(lhs.perfect != rhs.perfect) { - return lhs.perfect > rhs.perfect; - } - else { - return lhs.id < rhs.id; - } - } - -} - -int main(int argc, char *argv[]) { -#ifndef ONLINE_JUDGE - freopen("in.txt", "r", stdin); - freopen("out.txt", "w", stdout); -#endif - - int N, K, M; - cin >> N >> K >> M; - vector full(K); - for(int i = 0; i < K; ++i) - cin >> full[i]; - - vector v(N); - for(int i = 0; i < N; ++i) { - vector tmp(K, -1); - vector tmp2(K, -2); - v[i].p = tmp; - v[i].done = tmp2; - v[i].total = 0; - v[i].perfect = 0; - } - for(int i = 0; i < M; ++i) { - int sid, pid, score; - cin >> sid >> pid >> score; - sid--; - pid--; - if(score >= 0) - v[sid].done[pid] = 0; - v[sid].p[pid] = max(v[sid].p[pid], score); - v[sid].p[pid] = max(v[sid].p[pid], 0); - //if(score != -1) { - // v[sid].total += score; - // if(full[pid] == score) - // v[sid].perfect += 1; - //} - v[sid].id = sid; - - } - - for(int i = 0; i < v.size(); ++i) { - v[i].total = 0; - for(int j = 0; j < K; ++j) { - if(v[i].p[j] != -1) - v[i].total += v[i].p[j]; - if(full[j] == v[i].p[j]) - v[i].perfect += 1; - } - } - - sort(v.begin(), v.end(), cmp); - vector result; - - for(int i = 0; i < v.size(); ++i) { - bool allNone = true; - /*if(v[i].total != 0) - allNone = false;*/ - for(int j = 0; j < K; ++j) { - if(-2 != v[i].done[j]) { - allNone = false; - break; - } - } - if(allNone) - continue; - result.push_back(v[i]); - } - - int pre = result[0].total, curRank = 1, num = 0; - for(int i = 0; i < result.size(); ++i) { - if(result[i].total != pre) { - curRank += num; - num = 1; - pre = result[i].total; - } - else { - ++num; - } - printf("%d %05d %d", curRank, result[i].id + 1, result[i].total); - for(int j = 0; j < K; ++j) { - if(result[i].p[j] == -1) - printf(" -"); - else - printf(" %d", result[i].p[j]); - } - printf("\n"); - } - - return 0; -} \ No newline at end of file diff --git a/1077.cpp b/1077.cpp deleted file mode 100644 index 48d0ceb..0000000 --- a/1077.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include -#include -#include -#include - -using namespace std; - -int main(int argc, char* argv[]) { - int N; - scanf("%d\n", &N); - if(0 == N) { - printf("nai\n"); - return 0; - } - vector v(N); - for(int i = 0; i < N; ++i) { - getline(cin, v[i]); - } - vector suffix; - - for(int index = 1; index <= v[0].size(); ++index) { - bool allequal = true; - char cur = v[0][v[0].size() - index]; - for(int i = 0; i < v.size(); ++i) { - if(v[i].size() - index < 0 || v[i][v[i].size() - index] != cur) { - allequal = false; - break; - } - } - if(allequal) { - suffix.push_back(cur); - } - else { - break; - } - } - - if(0 == suffix.size()) { - printf("nai\n"); - } - else { - for(int i = suffix.size() - 1; i >= 0; --i) { - cout << suffix[i]; - } - printf("\n"); - } - - return 0; -} \ No newline at end of file diff --git a/1081.cpp b/1081.cpp deleted file mode 100644 index f67629e..0000000 --- a/1081.cpp +++ /dev/null @@ -1,119 +0,0 @@ -#include -#include -#include -#include -#include - -using namespace std; - -class Rational { -public: - int flag; - int numerator; - int denominator; -}; - -int gcd(int a, int b) { - if(a == 0 || b == 0 || a == 1 || b == 1) - return 1; - a = abs(a); - b = abs(b); - if(b > a) - swap(a, b); - while(b != 0) { - int tmp = b; - b = a % b; - a = tmp; - } - return a; -} - -void fit(Rational &r) { - if(0 == r.numerator) { - r.flag = 1; - r.denominator = 1; - return; - } - int g = gcd(r.numerator, r.denominator); - r.numerator /= g; - r.denominator /= g; -} - -void sum(Rational &lhs, Rational &rhs) { - fit(lhs); - fit(rhs); - int g = gcd(lhs.denominator, rhs.denominator); - int newD = lhs.denominator / g * rhs.denominator; - int newN = lhs.flag * newD / lhs.denominator * lhs.numerator + rhs.flag * newD / rhs.denominator * rhs.numerator; - if(newN < 0) { - lhs.flag = -1; - newN = -newN; - } - else - lhs.flag = 1; - lhs.numerator = newN; - lhs.denominator = newD; -} - -int main(int argc, char *argv) { -#ifndef ONLINE_JUDGE - freopen("in.txt", "r", stdin); - freopen("out.txt", "w", stdout); -#endif - - int n; - cin >> n; - vector v(n); - for(int i = 0; i < n; ++i) { - int a, b; - scanf("%d/%d", &a, &b); - if(a < 0) { - v[i].flag = -1; - a = -a; - } - else - v[i].flag = 1; - v[i].numerator = a; - v[i].denominator = b; - } - - Rational result; - result.flag = 1; - result.numerator = 0; - result.denominator = 1; - - for(int i = 0; i < v.size(); ++i) { - sum(result, v[i]); - } - - fit(result); - - if(0 == result.numerator) { - printf("0\n"); - return 0; - } - - - int integer = result.numerator / result.denominator; - if(integer != 0) { - - if(-1 == result.flag) - printf("-"); - - printf("%d", integer); - } - - if(result.denominator != 1) { - if(integer != 0) - printf(" "); - else { - if(-1 == result.flag) - printf("-"); - } - printf("%d/%d", result.numerator % result.denominator, result.denominator); - } - - printf("\n"); - - return 0; -} \ No newline at end of file diff --git a/1090.cpp b/1090.cpp deleted file mode 100644 index e66dd8e..0000000 --- a/1090.cpp +++ /dev/null @@ -1,68 +0,0 @@ -#include -#include -#include -#include - -using namespace std; - -int main(int argc, char *argv[]) { - int N; - double P, r; - scanf("%d%lf%lf", &N, &P, &r); - r = 1.0 + r / 100; - vector pre(N, 0); - for(int i = 0; i < N; ++i) { - scanf("%d", &pre[i]); - } - vector root; - vector< vector > v(N, vector()); - for(int i = 0; i < pre.size(); ++i) { - if(-1 == pre[i]) - root.push_back(i); - else { - v[ pre[i] ].push_back(i); - } - } - int curNum = 0, curLen = 0, preNum = 0; - queue q; - for(int i = 0; i < root.size(); ++i) { - q.push(root[i]); - curNum++; - } - preNum = curNum; - curNum = 0; - q.push(-2); - - while(q.size() != 0) { - if(-2 == q.front() && q.size() == 1) { - q.pop(); - break; - } - else if(-2 == q.front()) { - q.pop(); - q.push(-2); - preNum = curNum; - curNum = 0; - ++curLen; - continue; - } - - int curIndex = q.front(); - q.pop(); - for(int i = 0; i < v[curIndex].size(); ++i) { - q.push(v[curIndex][i]); - curNum++; - } - // curNum += v[curIndex].size(); - } - - double result = P; - for(int i = 0; i < curLen; ++i) { - result *= r; - } - - // cout << curLen << " " << preNum << endl; - printf("%.2f %d\n", result, preNum); - - return 0; -}