算法设计
冰阔落
Stay hungry, Stay foolish, Stop when you are perfect.
展开
-
UVA - 10057 A mid-summer night's dream.
#include #include using namespace std; int main() { int n, arr[1000005]; while (scanf("%d", &n) != EOF) { for (int i = 0; i < n; i++) scanf("%d", &arr[i]); sort(arr, arr + n); int left =原创 2014-09-20 21:03:57 · 1580 阅读 · 0 评论 -
UVA - 10706 Number Sequence
#include #include int main() { long long T, A[32000] = {0}, B[32000] = {0}; scanf("%lld", &T); for (int i = 1; i < 32000; i++) { A[i] = A[i-1] + log10(i) + 1; B[i] = B[i-1] + A[i]; } whi原创 2014-10-28 20:15:30 · 1567 阅读 · 0 评论 -
UVA - 10954 Add All
题目大意:给出n个数,要将n个数相加,每次相加所得的值为当次的计算量,完成所有的求和运算后,要求总的计算量最小。 解题思路:只要每次挑选最小的两个数出来相加就可以了,然后将和当成新的一个数放回数组。 #include #include using namespace std; int main() { priority_queue, greater > q; int n, t原创 2014-10-12 15:15:47 · 1541 阅读 · 0 评论 -
UVALive - 2322 Wooden Sticks
#include #include using namespace std; struct Stick{ int l; int w; int vis; }; int cmp(Stick a, Stick b) { if (a.l != b.l) return a.l < b.l; return a.w < b.w; } int main() { int T, n; sc原创 2014-10-28 23:09:48 · 1548 阅读 · 0 评论 -
UVA - 10602 Editor Nottoobad
#include #include #include using namespace std; int main() { int T; cin >> T; string s[105]; while (T--) { int n; cin >> n; for (int i = 0; i < n; i++) cin >> s[i]; sort(s, s + n);原创 2014-10-12 16:53:03 · 1507 阅读 · 0 评论 -
UVA - 10400 Game Show Math
#include #include int n, target, num[105], vis[105][64005], rec[105]; char str[5]= {"+-*/"}; bool DFS(int deep, int sum) { if (deep == n) { if (sum == target) return true; return false;原创 2014-10-15 17:45:04 · 1570 阅读 · 0 评论 -
UVA - 10718 Bit Mask
#include #include int main() { unsigned int N, L, U, M; while (scanf("%u%u%u", &N, &L, &U) != EOF) { M = 0; for (int i = log2(U); i >= 0; i--) if ( (M + (1 << i)) <= U && !(N & 1 << i) ||原创 2014-10-16 21:16:08 · 1500 阅读 · 0 评论 -
UVA - 10245 The Closest Pair Problem
#include #include #include using namespace std; struct Node{ double x; double y; } node[10005]; int cmp(Node a, Node b) { return a.x < b.x; } int main() { int N; while (scanf("%d", &N), N)原创 2014-10-17 19:41:54 · 1532 阅读 · 0 评论 -
UVA - 11054 Wine trading in Gergovia
#include int main() { int n, num; while (scanf("%d", &n), n) { long long sum = 0, temp = 0; while (n--) { scanf("%d", &num); temp += num; sum += temp > 0 ? temp : -temp; } printf(原创 2014-10-17 20:39:42 · 1548 阅读 · 0 评论 -
UVA - 993 Product of digits
#include int main() { int T, ans[20]; scanf("%d", &T); while (T--) { int n, cnt = 0; scanf("%d", &n); if (n == 1) { printf("1\n"); continue; } for (int i = 9; i > 1; i--) whil原创 2014-10-18 10:28:35 · 1688 阅读 · 0 评论 -
UVALive - 2326 Moving Tables
#include #include using namespace std; struct Road { int l; int r; int vis; }; int cmp(Road a, Road b) { if (a.l != b.l) return a.l < b.l; return a.r < b.r; } int main() { int T, N; scan原创 2014-11-05 15:24:01 · 1634 阅读 · 0 评论 -
UVALive - 2911 Maximum
#include #include int main() { int m, p, a, b; while (scanf("%d%d%d%d", &m, &p, &a, &b) != EOF) { int temp = a * b, cnt = 0; double num = pow(sqrt(a), p); for (int i = 1; i < m; i++) tem原创 2014-11-06 21:26:11 · 1634 阅读 · 0 评论 -
UVALive - 2519 Radar Installation
#include #include #include using namespace std; struct Node { double l; double r; } A[1005]; int cmp (Node a, Node b) { return a.r < b.r; }; int main() { int n, d, T = 0; while (scanf("%d%d原创 2014-11-06 13:04:04 · 1570 阅读 · 0 评论 -
UVA - 10714 Ants
题目大意:一根棍子上有n只蚂蚁, 这些蚂蚁开始可以任意朝着一个方向移动一直走,向左或是向右,并且移动速度是相同的,但是一旦蚂蚁碰到迎面走来的另一只蚂蚁,那么这两只蚂蚁都会马上改变移动方向,朝反方向移动。求所有蚂蚁离开木棍的最小和最长时间。 解题思路:其实题目给出的两只蚂蚁碰头的可能是迷惑人的,因为开始所有蚂蚁都朝一个方向移动,速度又相同,根本不可能追上,所以不用考虑只一点,这样的话只要分原创 2014-10-12 14:01:24 · 1576 阅读 · 0 评论 -
UVA - 10020 Minimal coverage
题目大意: 解题思路:原创 2014-10-12 13:16:46 · 1540 阅读 · 0 评论 -
UVA 10341 Solve It
#include #include int main() { int p, q, r, s, t, u; while (scanf("%d%d%d%d%d%d", &p, &q, &r, &s, &t, &u) != EOF) { double x, a = 0, b = 1; if ((p * exp(0) + q * sin(0) + r * cos(0) + s * tan原创 2014-08-06 09:03:14 · 1477 阅读 · 0 评论 -
UVA 10763 - Foreign Exchange
题目大意: 解题思路: #include #include using namespace std; int main() { int n; while (scanf("%d", &n), n) { int person_1[500000] = {0}, person_2[500000] = {0}, cnt; for (int i = 0; i < n; i++原创 2014-09-14 18:54:09 · 1682 阅读 · 0 评论 -
UVA 10905 - Children's Game
#include #include #include using namespace std; int cmp(string a, string b) { return a + b > b + a; } int main() { int n; string str[60]; while (cin >> n && n) { for (int i = 0; i < n; i++)原创 2014-09-13 21:23:52 · 1632 阅读 · 0 评论 -
UVA 270 - Lining Up
题目大意: 解题思路: #include int main() { int t, x[705], y[705]; char str[100]; scanf("%d\n\n", &t); while (t--) { int n, ans = 0; for (n = 0; gets(str) && str[0] != '\0'; n++)原创 2014-09-14 21:26:10 · 1617 阅读 · 0 评论 -
UVA - 10487 Closest Sums
#include #include #include using namespace std; int main() { int n, m, cnt = 0, arr[1005]; while (scanf("%d", &n), n) { printf("Case %d:\n", ++cnt); for (int i = 0; i < n; i++) scanf("%d"原创 2014-09-26 19:53:20 · 1561 阅读 · 0 评论 -
UVA - 10340 All in All
#include int main() { char s1[100000], s2[100000]; while (scanf("%s%s", s1, s2) != EOF) { int cnt = 0; for (int i = 0; s2[i] != '\0'; i++) if (s1[cnt] == s2[i]) cnt++; printf(s1[cnt]原创 2014-09-26 21:38:30 · 1639 阅读 · 0 评论 -
UVA - 10026 Shoemaker's Problem
#include #include using namespace std; struct Job { int fine; int time; int order; } job[1005]; bool cmp(Job x, Job y) { return x.fine * y.time > y.fine * x.time; } int main() { int t, n; s原创 2014-09-27 16:32:00 · 1498 阅读 · 0 评论 -
UVA - 10700 Camel trading
#include int main() { int n; scanf("%d\n", &n); while (n--) { long long exp[2][15] = {0}, cnt[2] = {0, -1}, num, max = 1, min = 0; char c = '+'; do { scanf("%lld", &num); if (c == '+'原创 2014-09-27 11:21:35 · 1603 阅读 · 0 评论 -
UVA - 11100 The Trip, 2007
#include #include using namespace std; int main() { int n, temp = 0, arr[10005]; while (scanf("%d", &n), n) { for (int i = 0; i < n; i++) scanf("%d", &arr[i]); sort(arr, arr + n); int m原创 2014-10-21 19:15:29 · 1521 阅读 · 0 评论 -
UVA - 10041 Vito's Family
#include #include using namespace std; int main() { int T, arr[505]; scanf("%d", &T); while (T--) { int n, sum = 0; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &arr[i]);原创 2014-10-21 19:59:28 · 1633 阅读 · 0 评论 -
UVA - 11129 An antiarithmetic permutation
#include #include int n, A[10005], T[10005]; void deal(int left, int right) { if (left == right) return; memcpy(T, A, sizeof(A)); int cnt = left; for (int i = left; i <= right; i += 2) A[c原创 2014-10-21 23:02:00 · 1614 阅读 · 0 评论 -
UVA - 108 Maximum Sum
#include #include int main() { int N, A[105][105], T[105], MAX = -128; scanf("%d", &N); for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) scanf("%d", &A[i][j]); for (int i = 0; i <原创 2014-10-23 20:27:58 · 1601 阅读 · 0 评论