set history=50
set nu!
set cursorline
set guioptions-=T
set ruler
set shiftwidth=4
set autoindent
set smartindent
set cindent
set ai!
set tabstop=4
syntax on
colorscheme torte
map <F8> :call SetTitle()<CR>
func SetTitle()
let l = 0
let l = l + 1 | call setline(l, "/*")
let l = l + 1 | call setline(l, " * Author: youngtrips")
let l = l + 1 | call setline(l, " * Created Time: ".strftime("%c"))
let l = l + 1 | call setline(l, " * File Name: ".expand("%"))
let l = l + 1 | call setline(l, " * Description: ")
let l = l + 1 | call setline(l, " */")
let l = l + 1 | call setline(l, "#include <algorithm>")
let l = l + 1 | call setline(l, "#include <iostream>")
let l = l + 1 | call setline(l, "#include <cassert>")
let l = l + 1 | call setline(l, "#include <cstring>")
let l = l + 1 | call setline(l, "#include <cstdlib>")
let l = l + 1 | call setline(l, "#include <cstdio>")
let l = l + 1 | call setline(l, "#include <cmath>")
let l = l + 1 | call setline(l, "#include <vector>")
let l = l + 1 | call setline(l, "#include <queue>")
let l = l + 1 | call setline(l, "#include <map>")
let l = l + 1 | call setline(l, "#include <set>")
let l = l + 1 | call setline(l, "")
let l = l + 1 | call setline(l, "using namespace std;")
let l = l + 1 | call setline(l, "")
let l = l + 1 | call setline(l, "#define FR(i,a,b) for(int i=(a);i<(b); i++)")
let l = l + 1 | call setline(l, "#define FOR(i,n) FR(i,0,n)")
let l = l + 1 | call setline(l, "#define MAX(a,b) ((a)>(b)?(a):(b))")
let l = l + 1 | call setline(l, "#define MIN(a,b) ((a)<(b)?(a):(b))")
let l = l + 1 | call setline(l, "#define SQR(x) ((x)*(x))")
let l = l + 1 | call setline(l, "#define MAXINT64 0x7FFFFFFFFFFFFFFFLL")
let l = l + 1 | call setline(l, "#define MAXINT 0x7FFFFFFF")
let l = l + 1 | call setline(l, "#define eps 1e-12")
let l = l + 1 | call setline(l, "#define MP make_pair")
let l = l + 1 | call setline(l, "#define PB push_back")
let l = l + 1 | call setline(l, "#define A first")
let l = l + 1 | call setline(l, "#define B second")
let l = l + 1 | call setline(l, "")
let l = l + 1 | call setline(l, "typedef long long int64;")
let l = l + 1 | call setline(l, "")
let l = l + 1 | call setline(l, "int main() {")
let l = l + 1 | call setline(l, "")
let l = l + 1 | call setline(l, " return 0;")
let l = l + 1 | call setline(l, "}")
let l = l + 1 | call setline(l, "")
endfunc
map <F5> :!g++ -o main % -lm -Wall<CR>
map <F9> :!./main<CR>
map<F4> :call AddComment()<cr>
func AddComment()
if (getline('.')[0] == '/')
normal ^xx
else
normal 0i//
endif
endfunc
备份vimrc
2009年11月23日 06:40
退役了
2009年11月22日 07:03
离最后一场比赛好久了,刚突然想起写点什么。
大四了,记得第一次知道ACM是高中时候好朋友告诉我的,当时傻了不懂,记得登录过acm.pku.edu.cn一两次。
高中毕业了来了一所很普通普通的学校,选了一个自己喜欢的专业。
很多时候别人问我为什么读计算机,我都说我喜欢,仅仅是喜欢,喜欢写程序。
记得初一那年那着小霸王学习机的说明书琢磨,学了G-BASIC,写了好些代码,记得有一个最长的代码是用G-BASIC编写用游戏手柄控制玛丽在屏幕上行走的游戏代码,
当时写出了,好兴奋,呵呵。
刚进ACM几个月因为种种原因,我中断了练习,那时只做了100多道水题,2008年又中断了练习,只因为学校要办Chengdu Region Site。
之后在外头做了一段时间兼职,后来现在的队员找到了我问我想继续参加ACM吗,当时没有考虑什么就答应了,我知道仅仅是喜欢程序。
大约练习了8个月的时间一切结束了。
两块铜牌结束了我的ACM比赛历程,有些遗憾,有些幸运。
解决Fedora Rhythmbox中文显示乱码的问题
2009年9月29日 12:48
step1.
yum install python-mutagen
step2.
转到mp3文件夹
执行:mid3iconv -e GBK *.mp3
step3.
重新打开Rhythmbox,导入mp3
pku 2286
2009年9月26日 19:24
IDA*
一开始一直犯个幼稚的错误:当No needed move时忘记输出中心的数字
代码:
#include <stdio.h> #include <string.h> #define MAXM 26 #define MAXN 8 int col[2][MAXN] = {{0, 1, 3, 7, 12, 16, 21, 23}, {0, 2, 4, 9, 13, 18, 22, 24}}; int row[2][MAXN] = {{0, 5, 6, 7, 8, 9, 10, 11}, {0, 14, 15, 16, 17, 18, 19, 20}}; int center[8] = { 7, 8, 9, 12, 13, 16, 17, 18}; int board[MAXM]; int found; int top; char ops[1000002]; int init() { int i; scanf("%d", &board[1]); if(board[1] == 0) return 0; for(i = 2;i <= 24; i++) scanf("%d", &board[i]); return 1; } void mv(int board[], int dir) { int tmp, i; switch(dir) { case 0: tmp = board[col[0][1]]; for(i = 1;i < 7; i++) board[col[0][i]] = board[col[0][i+1]]; board[col[0][7]] = tmp; break; case 1: tmp = board[col[1][1]]; for(i = 1;i < 7; i++) board[col[1][i]] = board[col[1][i+1]]; board[col[1][7]] = tmp; break; case 2: tmp = board[row[0][7]]; for(i = 7;i > 1; i--) board[row[0][i]] = board[row[0][i-1]]; board[row[0][1]] = tmp; break; case 3: tmp = board[row[1][7]]; for(i = 7;i > 1; i--) board[row[1][i]] = board[row[1][i-1]]; board[row[1][1]] = tmp; break; case 4: tmp = board[col[1][7]]; for(i = 7;i > 1; i--) board[col[1][i]] = board[col[1][i-1]]; board[col[1][1]] = tmp; break; case 5: tmp = board[col[0][7]]; for(i = 7;i > 1; i--) board[col[0][i]] = board[col[0][i-1]]; board[col[0][1]] = tmp; break; case 6: tmp = board[row[1][1]]; for(i = 1;i < 7; i++) board[row[1][i]] = board[row[1][i+1]]; board[row[1][7]] = tmp; break; case 7: tmp = board[row[0][1]]; for(i = 1;i < 7; i++) board[row[0][i]] = board[row[0][i+1]]; board[row[0][7]] = tmp; break; } } int heur(int board[]) { int n1 = 0; int n2 = 0; int n3 = 0; int i; for(i = 0;i < 8; i++) { switch(board[center[i]]) { case 1: n1++; break; case 2: n2++; break; case 3: n3++; break; } } if(n1 < n2) n1 = n2; if(n1 < n3) return 8 - n3; return 8 - n1; } void dfs(int board[], int pre, int dp, int maxdp) { int f = heur(board); int tmp[MAXM], i; if(f + dp > maxdp || found) return; if(f == 0) { ops[top + 1] = '\0'; printf("%s\n", ops); printf("%d\n", board[12]); found = 1; return; } for(i = 0;i < 8; i++) { if((pre == 0 && i == 5) || (pre == 5 && i == 0)) continue; if((pre == 1 && i == 4) || (pre == 4 && i == 1)) continue; if((pre == 2 && i == 7) || (pre == 7 && i == 2)) continue; if((pre == 3 && i == 6) || (pre == 6 && i == 3)) continue; memcpy(tmp, board, sizeof(tmp)); mv(tmp, i); ops[++top] = 'A' + i; dfs(tmp, i, dp + 1, maxdp); top--; } } void ida_star() { int maxdp = heur(board); if(maxdp == 0) { printf("No moves needed\n"); printf("%d\n", board[12]); return; } found = 0; while(found == 0) { top = -1; dfs(board, -1, 0, maxdp); maxdp++; } } int main() { while(init()) ida_star(); return 0; }
pku 1077 IDA*版
2009年9月24日 23:22
#include <stdio.h> #include <string.h> #define ABS(x) ((x)<0?-(x):(x)) typedef struct { int stat[10]; int x; }node_t; node_t st; int stack[1000002]; int dist[10][10]; /* * d -- 0 * r --- 1 * u --- 2 * l --- 3 */ char act[] = "drul"; int dir[4] = {3, 1, -3, -1}; int mv[10][5] = {{0}, {2, 0, 1}, /* 1 */ {3, 0, 1, 3}, /* 2 */ {2, 0, 3}, /* 3 */ {3, 0, 1, 2}, /* 4 */ {4, 0, 1, 2, 3},/* 5 */ {3, 0, 2, 3}, /* 6 */ {2, 1, 2}, /* 7 */ {3, 1, 2, 3}, /* 8 */ {2, 2, 3} /* 9 */ }; int found, top, min; int get_dist(int i, int j) { int x1 = (i - 1) / 3 + 1; int y1 = (i - 1) % 3 + 1; int x2 = (j - 1) / 3 + 1; int y2 = (j - 1) % 3 + 1; return ABS(x1 - x2) + ABS(y1 - y2); } void init_dist() { int i, j; for(i = 1;i <= 9; i++) for(j = 1;j <= 9; j++) dist[i][j] = get_dist(i, j); } int heur(node_t node) { int sum = 0, i; for(i = 1;i <= 9; i++) sum += dist[i][node.stat[i]]; return sum; } int is_solvable(node_t st) { int res = 0, i, j; for(i = 1;i <= 9; i++) for(j = 1;j < i; j++) if(st.stat[i] < st.stat[j]) res++; res += dist[9][st.x]; return (res & 1) == 0; } int init() { char str[2]; int i; for(i = 1;i <= 9; i++) { if(scanf("%s", str) == EOF) return 0; if(str[0] == 'x') { st.stat[i] = 9; st.x = i; } else st.stat[i] = str[0] - '0'; } return 1; } void output() { int i; for(i = 1;i <= top; i++) printf("%c", act[stack[i]]); printf("\n"); } void dfs(int p, int dp, int maxdp) { int f = heur(st); int i, k, t; if(min > f) min = f; if(f + dp > maxdp || found) return; if(f == 0) { output(); found = 1; return; } for(i = 1;i <= mv[p][0]; i++) { k = mv[p][i]; t = dir[k] + p; st.stat[p] = st.stat[t]; st.stat[t] = 9; stack[++top] = k; dfs(t, dp + 1, maxdp); top--; st.stat[t] = st.stat[p]; st.stat[p] = 9; } } void ida_star(node_t st) { int maxdp = heur(st); found = 0; while(found == 0) { min = 0x7fffffff; top = 0; dfs(st.x, 0, maxdp); maxdp += min; } } int main() { init_dist(); while(init()) { if(is_solvable(st) == 0) { printf("unsolvable\n"); continue; } ida_star(st); } return 0; }