算法之路
alfredtofu
这个作者很懒,什么都没留下…
展开
-
双基回文数
<br />/* * test.cpp * * Created on: Dec 15, 2010 * Author: alfred */#include <iostream>#include <string>using namespace std;bool judge(int b) { string a; int count = 0; for(int i = 2; i <= 10; i++) { int m = b; a.clear()原创 2010-12-15 12:59:00 · 950 阅读 · 0 评论 -
sicily 1135
这题一开始我是用dfs做的(可连续飞行却只算一步这条件引发的),后来改用dfs,做得很顺利,提交,WA。。郁闷了,想了好久也想不出,后来请教了阿樵,发觉原来是总飞行路程是不能超过D,不是每一次飞行不能超过D,进行修改,但是还是WA。。最后研究发现了一个point:飞行一格跟移动一格的区别,好吧。。又WA。。原来是原来的代码没改好,再交,AC了!!/* * test.cpp * * Created on: Dec 17, 2010 * Author: alfred */#i原创 2010-12-18 13:45:00 · 1234 阅读 · 2 评论 -
1150. 简单魔板[Special judge]
bfs搞定/* * 1150.cpp * * Created on: Dec 18, 2010 * Author: alfred */#include #include #include #include using namespace std;struct step { int status[8]; string step;};int target[8];const int init[8] = {1, 2, 3, 4, 8, 7,原创 2010-12-18 15:00:00 · 1931 阅读 · 1 评论 -
sicily 1152
<br />投机取巧,我是用深搜找出一条路径,然后。。。。。。。。<br />/* * 1152.cpp * * Created on: Dec 30, 2010 * Author: alfred */#include <iostream>using namespace std;int num[30] = {10, 2, 13, 26, 15, 19, 27, 23, 12, 4, 8, 1, 25, 14, 1, 9, 5, 18, 29, 16, 24, 28原创 2010-12-31 13:04:00 · 998 阅读 · 3 评论 -
sicily 1151
大概思路跟1150的一样,数据量大了,我刚开始是用set来存已经变换过的魔板,结果TLE,后来网上查了一下,用康托,结果WA。。但是我又不知道错在哪。最后用set来存,AC了哦/* * 1150.cpp * * Created on: Dec 18, 2010 * Author: alfred */#include #include #include #include #include using namespace std;struct step原创 2010-12-31 13:09:00 · 1618 阅读 · 0 评论 -
sicily 1152 1153 马的周游
<br />之前发过一篇1152的,后来做1153发现找不到一条回路。。郁闷,只好循规蹈矩。<br />思路:<br />1.深搜,无优化,TL;<br />2.加上对每次游走时的分析,先走入度较小的点,我认为这样可以快速排除不能走的点。<br />#include <iostream>#include <cstring>#include <map>using namespace std;//#define COL 6//#define ROW 5#define COL 8#de原创 2011-01-04 20:51:00 · 1429 阅读 · 0 评论 -
sicily 1156
<br />#include <iostream>using namespace std;struct Node { char data; int left; int right;};int n;Node node[1001]; void preorder(int tmp) { cout << node[tmp].data; if(node[tmp].left != 0) preorder(node[tmp].left); if(node[tmp].rig原创 2011-01-05 21:35:00 · 1255 阅读 · 2 评论 -
sicily 1002
这题没什么说的。。就是深搜,只不过我搞了一个小时,原因:刚昨晚马的周游问题,数字之间用空格分开。。谁知道这题是用逗号,一改,AC了#include #include #include using namespace std;int n, m, d;bool isPrime[9956];vector ans;bool isVis[1001];bool isPass() { int maxIndex = ans.size() - 1; int sum = ans.back原创 2011-01-04 23:54:00 · 2389 阅读 · 4 评论 -
sicily 1424
<br />刚开始把邻接表给建错了,应该反过来。。<br />我在自己测试的时候思维也这样,搞到我看不出自己哪里出错了。后来问师兄他说我的层反了,改了下还是错。最后发现不是层反了,是邻接表错了<br />#include <iostream>#include <queue>#include <vector>#include <cstring>using namespace std;int degree[10000]; //个顶点的入度vector<int> adj[10000]原创 2011-01-06 17:24:00 · 853 阅读 · 0 评论 -
sicily 1090
最小生成树#include #include using namespace std;#define MAX 65537int adj[500][500];bool isVis[500];int lowcost[500];int main() { int cases, n; cin >> cases; while(cases--) { cin >> n; int max = 0; for(int原创 2011-01-07 22:36:00 · 1042 阅读 · 0 评论 -
sicily 1317
<br />这题不难,跟马的周游问题一样<br />开始没优化,就直接穷举(看到10秒嘛。。),结果TL,后来优化一下,对可能出现的数字少的点先进行枚举。<br />思路就这样,可是我做了四个小时。。。。。。。。。最后我认真认真的看一次题目,发现如果有多个解,solution要加s。。。。这基本的复数形式我错了。。。o(︶︿︶)o 唉<br /> <br />#include <iostream>#include <cstring>using namespace std;char a[9][9]原创 2011-01-08 14:41:00 · 1512 阅读 · 0 评论 -
sicily 1155
<br /> <br />刚开始从0开始找。。TL了,换成从n-1开始找。AC了。。#include <iostream>#include <cstring>using namespace std;bool adj[200][200];bool isVis[200];int n;bool dfs(int cur) { if(cur == 0) return true; for(int i = 0; i < n; i++) { if(!isVis[i] && adj[cu原创 2011-01-08 23:46:00 · 1152 阅读 · 0 评论 -
一时兴起
<br />#include <iostream>#include <ctime>#include <cstdlib>#include <cstring>using namespace std;#define SIZE 10void heapSort(int size, int data[]) { int cur = (size - 2) / 2; int tmp; //构建最大堆 while(cur >= 0) { int j = 2 * cur + 1;原创 2011-01-07 21:00:00 · 517 阅读 · 0 评论 -
sicily 1034
<br />#include <iostream>#include <cstring>#include <queue>using namespace std;struct node { int level; int num; node(int num, int level) { this->num = num; this->level = level; }};int n, m;bool isVis[101];bool adj[101][101];原创 2011-01-09 19:47:00 · 1062 阅读 · 2 评论 -
sicily 1031
迪克斯(马克思)算法。。#include #include #include #include using namespace std;int n;int places;map m;int adj[2010][2010];bool isVis[1000];int lowCost[1000];int main() { int cases; cin >> cases; string source, des; map::iterator iter;原创 2011-01-09 21:41:00 · 959 阅读 · 0 评论 -
sicily 1443
<br />在图书馆响铃的那一刻,AC了!!<br />这题是优先级队列,当时候做的时候就在纠结deque这个类。因为大一见过,在头尾操作是很爽的一个类,当时想不起。。百度一下出来了。。然后直接AC了<br />#include <iostream>#include <deque>using namespace std;struct node { int num; int p; node(int num = 0, int p = 0) { this->num = num;原创 2011-01-10 22:20:00 · 1271 阅读 · 0 评论 -
sicily 1308
<br />关键在于怎么读数据<br />#include <iostream>#include <sstream>#include <string>#include <vector>#include <cstring>using namespace std;int n, m;int cost[10000];vector<int> adj[10000];int allCost;bool isVis[10000];void getCost(int m) {原创 2011-01-09 23:56:00 · 619 阅读 · 0 评论 -
sicily 1198
<br />全排+排序<br />#include <iostream>#include <cstring>#include <string>#include <set>using namespace std;string s[8];int n;set<string> data;bool isVis[8];string sub;void combin(int cur) { if(cur == n) { data.insert(sub); return;原创 2011-01-13 19:26:00 · 785 阅读 · 0 评论 -
最大值最小化
<br />完全个人想法,欢迎拍砖。。指导优化<br />#include <iostream>using namespace std;int main() { int n; cout << "输入子序列长度:"; cin >> n; int *seq = new int[n]; int m; cout << "输入要划分成多少个序列:"; cin >> m; int *par = new int[m]; //划分的标志位 int sum = 0;原创 2011-01-20 12:32:00 · 856 阅读 · 0 评论 -
sicily 2014
<br />全排<br /> <br />#include <iostream>using namespace std;int n, c, count;int coins[300];void _find(int sum, int cur) { sum -= coins[cur]; for(int i = 0; (sum = sum + coins[cur]) <= n; i++) { if(sum == n) { count++; return; }原创 2011-01-19 00:19:00 · 605 阅读 · 0 评论 -
棋盘覆盖
<br /> 分治+递归<br />//思路:棋盘大小为2^size * 2^size,不断将棋盘划分成4部分,若特殊方格在某一部分,只需继续递归,若不在,则在此部分构造一个特殊方格。//构造特殊方格要注意:由于划分4部分中三部分无特殊方格,故构造的特殊方格必须在这三部分连成一个L型牌#include <iostream>#include <iomanip>using namespace std;int chessBoard[1 << 9][1 << 9];void fill(int原创 2011-01-20 11:20:00 · 438 阅读 · 0 评论 -
sicily 1146
<br />对动态规划还不是很了解。。做了很久。。<br />#include <iostream>#include <cstring>using namespace std;struct { int t; int v;}data[101];int ans[1001];int T, M;int main() { //freopen("C:/Users/Alfred/Desktop/1.txt", "r", stdin); cin >> T >> M; mems原创 2011-01-23 16:58:00 · 652 阅读 · 0 评论 -
sicily 1294
//公式:x*y mod c=x*(y mod c) mod c#include using namespace std;int main() { int a, b, c; cin >> a >> b >> c; int ans = a % c; for(int i = 1; i原创 2011-01-23 19:22:00 · 401 阅读 · 0 评论 -
sicily 1325
<br />逐个逐个算就会TLE。。<br />#include <iostream>#include <cstring>using namespace std;int a[100001];int main() { int ans; memset(a, 0, sizeof(a)); for(int i = 1; ; i++) { ans = i; int tmp = i; while(tmp != 0) { ans += tmp % 10; tm原创 2011-01-23 19:54:00 · 625 阅读 · 0 评论 -
sicily 1137
呵呵。。我当时看了就想用分治来做(类似归并排序),但是归并的时候想不到怎么处理,感觉如果真要处理就跟我下面的代码一样,下面的代码是看了ac的人数直接写的。。#include #include using namespace std;int k;int data[30000];int n;int main() { while(cin >> n >> k) { for(int i = 0; i > data[i]; int _max = 0; for(int i =原创 2011-01-24 22:41:00 · 738 阅读 · 0 评论 -
sicily 1027
<br />巧用stl。。。<br />#include <iostream>#include <map>#include <string>using namespace std;int main() { int n; while(cin >> n && n != 0) { string ip, name; string tmp; map<string, string> m; map<string, string>::iterator iter; map原创 2011-01-22 00:18:00 · 853 阅读 · 0 评论 -
sicily 1036
<br />#include <iostream>#include <cstring>using namespace std;char keyword[11];char mes[10][101];char message[101];int len;int order[11];bool isEqual(char *x, char *y) { while((*x) != '/0' && (*y) != '/0') { if(*(x++) != *(y++)) retur原创 2011-01-23 09:16:00 · 681 阅读 · 0 评论 -
sicily 1028
<br />大数求余。。。<br />//规律第pth元素 p = (2 * i + 1) * 2^(n - 1);//n即为该元素.#include <iostream>#include <cstring>using namespace std;struct num { int dig[110]; int len; num operator = (num* tmp) { memcpy(dig, tmp->dig, sizeof(dig)); len = tmp-原创 2011-01-23 14:56:00 · 825 阅读 · 0 评论 -
sicily 1020
<br />同样大数求余<br />#include <iostream>#include <cstring>#include <string>using namespace std;int data[101];string s;int _mod(int b) { int d = 0; for(int i = 0; i < s.size(); i++) { d = d * 10 + s[i] - '0'; d = d % b; } return d;}原创 2011-01-23 17:25:00 · 725 阅读 · 0 评论 -
sicily 1200
<br />#include <iostream>using namespace std;int main() { int n; while(cin >> n && n != 0) { int ans = 0, tmp; while(n--) { cin >> tmp; ans ^= tmp; } cout << ans << endl; } return 0;}原创 2011-01-23 18:59:00 · 489 阅读 · 1 评论 -
sicily 1293
。。本来以为会TLE,看了一下statu。。发现TLE的人不多,那就暴力了#include #include using namespace std;int main() { int i, j; cin >> i >> j; int _max = 0, tmp, count; for(; i原创 2011-01-23 19:12:00 · 466 阅读 · 0 评论 -
sicily 1324
<br />#include <iostream>#include <string>using namespace std;int main() { int T; cin >> T; string s; while(T--) { cin >> s; int ans = 0; int k = 1; for(int i = 0; i < s.size(); i++) { if(s[i] == 'O') ans += k++; else k =原创 2011-01-23 19:28:00 · 376 阅读 · 0 评论 -
sicily 1341
<br />#include <iostream>#include <set>using namespace std;int main() { int n; while(cin >> n) { set<int> ans; int tmp; for(int i = 0; i < n; i++) { cin >> tmp; ans.insert(tmp); } cout << ans.size() << endl; bool isFirst原创 2011-01-23 19:37:00 · 398 阅读 · 0 评论 -
sicily 1232
<br />刚开始看不懂题目,晕浪,用google翻译了才懂。。<br />#include <iostream>using namespace std;int main() { int T; cin >> T; while(T--) { int ans = 1; int n, tmp; cin >> n; ans -= n; for(int i = 0; i < n; i++) { cin >> tmp; ans += tmp; }原创 2011-01-23 20:18:00 · 497 阅读 · 0 评论 -
sicily 1759
<br />看不到题目的图。。靠题意蒙,WA了两次。。不解释- -<br />#include <iostream>#include <algorithm>using namespace std;int circle[3][2] = {{30, 30}, {100, 30}, {170, 30}};int r[3] = {20, 10, 5};int main() { int T; cin >> T; while(T--) { int n; cin >> n;原创 2011-01-24 23:43:00 · 442 阅读 · 0 评论 -
sicily 1210
1:前序遍历第一个元素是根,后序遍历最后一个元素是根 2:前序遍历第二个元素是某子树的根,但左右不确定 3:在后序遍历中找到前序遍历的第二个元素,那么以这个元素为基准,可以划分新的左右子树 4:当前序遍历的第二个元素出现在后序遍历的倒数第二位,以后序遍历倒数第三位起向左数都是子树的元素,但是左右不确定,因此有2种情况 #include #include using namespace std;int main() { string pre, post; while(cin >> p原创 2011-01-21 23:16:00 · 750 阅读 · 0 评论 -
sicily 1029
<br />大数相加<br />#include <iostream>#include <cstring>using namespace std;class Data {public: Data() { memset(a, 0, sizeof(a)); size = 0; } Data(int num) { setNum(num); } int a[100]; int size;原创 2011-01-23 08:38:00 · 808 阅读 · 0 评论 -
sicily 1006
<br />虽然过了,但是是试了几种方法才过的,我对题目的median有点不解,median不是中值吗?<br />#include <iostream>#include <cstring>#include <string>#include <cmath>using namespace std;string s[120];string tmp = "ABCDE";bool isVis[5];string ini = "ABCDE";string data[101];i原创 2011-01-23 18:20:00 · 779 阅读 · 1 评论 -
sicily 1035
<br />#include <iostream>#include <string>#include <set>using namespace std;string data[101];int n;int main() { int T; cin >> T; while(T--) { cin >> n; set<string> s; set<string>::iterator iter; int count = 0; for(int i原创 2011-01-23 21:35:00 · 900 阅读 · 0 评论 -
sicily 1159
<br />sicily的水题都很多好多大数操作。。。<br />#include <iostream>#include <cstring>#include <cmath>using namespace std;int ans[101];char tmps[101];int n;int main() { int n; while(cin >> n) { cin >> tmps; memset(ans, 0, sizeof(ans)); int len =原创 2011-01-23 21:49:00 · 610 阅读 · 0 评论