备份vimrc

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
 

退役了

离最后一场比赛好久了,刚突然想起写点什么。

大四了,记得第一次知道ACM是高中时候好朋友告诉我的,当时傻了不懂,记得登录过acm.pku.edu.cn一两次。

高中毕业了来了一所很普通普通的学校,选了一个自己喜欢的专业。

很多时候别人问我为什么读计算机,我都说我喜欢,仅仅是喜欢,喜欢写程序。

记得初一那年那着小霸王学习机的说明书琢磨,学了G-BASIC,写了好些代码,记得有一个最长的代码是用G-BASIC编写用游戏手柄控制玛丽在屏幕上行走的游戏代码,

当时写出了,好兴奋,呵呵。

刚进ACM几个月因为种种原因,我中断了练习,那时只做了100多道水题,2008年又中断了练习,只因为学校要办Chengdu Region Site。

之后在外头做了一段时间兼职,后来现在的队员找到了我问我想继续参加ACM吗,当时没有考虑什么就答应了,我知道仅仅是喜欢程序。

大约练习了8个月的时间一切结束了。

两块铜牌结束了我的ACM比赛历程,有些遗憾,有些幸运。

 

解决Fedora Rhythmbox中文显示乱码的问题

step1.
        yum install python-mutagen
step2.
        转到mp3文件夹
        执行:mid3iconv -e GBK *.mp3
step3.
        重新打开Rhythmbox,导入mp3

pku 2286

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*版

 

#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;
}