win7下安装Fedora双系统

以前总是在XP下安装,今天刚拿到本子,自带win7,就索性在win7下安装fedora了。

刚拿来笔记本,只有C盘D盘,两个都是300多G,我用自带的磁盘管理工具把C盘压缩了一半(限制只能压缩一半),然后还有一个恢复区和另外一个忘了叫啥的区,总共4个主分区,所以没法再新建分区了,就算新建的也是把磁盘由基础磁盘改为了动态磁盘,当时迷糊了,到处搜方法没搜到,后来想到可以把D盘删了,重新建,这时就是逻辑分区了,然后继续分,分了4,5个区。

还剩下100多G的未使用分区,准备拿来安装fedora。

其中有一个分区,我格式成exFat格式,貌似也安装不了fedora,我后来用ADDS这款软件,转换成了FAT32。然后把fedora的ios文件放到这个盘符。

至于安装fedora,我没有使用grub4dos,而是EasyBCD。

Add New Entry→NeoGrub→Install→Configure,在打开的menu.lst文件中添加以下内容:

title Install Fedora 15

kernel (hd0,7)/isolinux/vmlinuz

initrd (hd0,7)/isolinux/initrd.img

boot

(以上由具体确定~)

然后就是漫长的安装过程了~~~

安装完后把EasyBCD生成的lst文件给Remove。

 

附加:

1.这是ADDS软件用法:

http://apps.hi.baidu.com/share/detail/11120852

2.这一篇是关于menu.lst内容的一些讲解:

http://blog.csdn.net/aaronychen/article/details/2270048

3.这一篇写的比我详细:

http://hi.baidu.com/780908586/blog/item/2e83ec896aa11b699f2fb477.html

HDU/HDOJ 2151 Worm(DP)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2151

先开始用的BFS,结果爆栈了,然后换成DP~~~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <string>
using namespace std;
 
int N, P, M, T;
 
// dp[M][T];
// 表示在M时间上,走到T的方案数
// dp[M][T] = dp[M-1][T-1] + dp[M-1][T+1]
// 初始化dp[0][P] = 1;
int dp[105][105];
 
int main()
{
    while(cin >> N >> P >> M >> T)
    {
        memset(dp, 0, sizeof(dp));
        dp[0][P] = 1;
        for(int i=1; i<=M; ++i)
            for(int j=1; j<=N; ++j)
            {
                if(j-1 >= 1)
                    dp[i][j] += dp[i-1][j-1];
                if(j+1 <= N)
                    dp[i][j] += dp[i-1][j+1];
            }
 
        cout << dp[M][T] << endl;
    }
}
 
/*
int cnt;
 
void BFS(int vis, int time)
{
    if(time==M && vis==T)
    {
        ++cnt;
        return ;
    }
    if(vis == T)
        return;
 
    if(vis<1 || vis>N)
        return;
 
    if(vis >= 2)
        BFS(vis-1, time+1);
    if(vis <= N-1)
        BFS(vis+1, time+1);
}
 
int main()
{
    while(cin >> N >> P >> M >> T)
    {
        cnt = 0;
        BFS(P, 0);
        cout << cnt << endl;
    }
}
*/

HDU/HDOJ 2717 Catch That Cow(BFS)

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=2717

基本的BFS,注意在Teleporting时,考虑if的条件,具体见代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <queue>
using namespace std;
 
int N, K;
int line[100005];
 
void BFS()
{
    queue<int> que;
    que.push(N);
    line[N] = 1;
 
    while(!que.empty())
    {
        int tmp = que.front();
        que.pop();
 
        if(tmp == K)
            break;
 
        int next = tmp-1;
        if(next>=0 && !line[next])
        {
            que.push(next);
            line[next] = line[tmp] + 1;
        }
 
        next = tmp+1;
        if(next>=0 && !line[next])
        {
            que.push(next);
            line[next] = line[tmp] + 1;
        }
 
        next = tmp*2;
        if(next<=100000 && !line[next] && next-K<K-tmp)
        {
            que.push(next);
            line[next] = line[tmp] + 1;
        }
    }
}
 
int main()
{
    //freopen("input.txt", "r", stdin);
    while(scanf("%d %d", &N, &K) != EOF)
    {
        memset(line, 0, sizeof(line));
        if(N >= K)
            line[K] = N-K+1;
        else
            BFS();
        printf("%d\n", line[K]-1);
 
    }
 
}

HDU/HDOJ 1280 前m大的数(sort || STL priority_queue)

题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1280

我直接用的STL的priority_queue做的~~~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <queue>
using namespace std;
 
int N, M;
int arr[3005];
 
int main()
{
    //freopen("input.txt", "r", stdin);
    priority_queue<int> pq;
    while(scanf("%d %d", &N, &M) != EOF)
    {
        for(int i=0; i<N; ++i)
            scanf("%d", &arr[i]);
        for(int i=0; i<N; ++i)
            for(int j=i+1; j<N; ++j)
                pq.push(arr[i]+arr[j]);
        for(int i=0; i<M; ++i)
        {
            if(i != 0)
                printf(" ");
            printf("%d", pq.top());
            pq.pop();
        }
        printf("\n");
    }
}

HDU/HDOJ 1575 Tr A(二分法求矩阵的幂)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1575

说实话,基本还没做过矩阵的题目,以前偶尔碰到一个,也是水题,直接暴力就行,但是这题的幂太大了,暴力明显不行,orz,百度了下,用二分法求矩阵的幂。

分析:

比如矩阵A, A的n次方A^n ,

当n为偶数时,A^n= A^(n/2 + n/2) = A^(n/2) * A^(n/2),

当n为奇数时,A^n= A^(n/2 + n/2 + 1) = A^(n/2) * A^(n/2) * A,

所以可以考虑用二分法。

以下是递归的描述:

1
2
3
4
5
6
7
8
9
10
11
Matrix POW(Matrix t, int k)
{
    if( k == 1 )
        return t;
    Matrix t1 = POW( t, k/2 );
    t1 = t1*t1;
    if( k & 1 )
        return t1 * t;
    else
        return t1;
}

当然,递归的效率不高,直接换成非递归的形式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/**
 * HDOJ 1575
 * 二分法求矩阵的幂
 * Date: 2011.11.22
 */
 
#include <iostream>
using namespace std;
 
int T;
int n, k;
 
typedef struct Matrix{
    int ma[15][15];
}Matrix;
 
Matrix A;   // 矩阵A
Matrix B;   // 保存最后的结果
Matrix unit;// 单位矩阵,用于在下面的fun函数中
const int MOD = 9973;
 
// 两个矩阵相乘
Matrix Mul(Matrix m1, Matrix m2)
{
    Matrix c;
    for(int i=0; i<n; ++i)
        for(int j=0; j<n; ++j)
        {
            c.ma[i][j] = 0;
            for(int k=0; k<n; ++k)
                c.ma[i][j] += m1.ma[i][k] * m2.ma[k][j];
            c.ma[i][j] %= MOD;
        }
    return c;
}
 
// 二分法求矩阵的幂
// 这个函数自己把num设为一个值,试试,推荐num=27
void fun(int num)
{
    Matrix in = A;
    Matrix un = unit;
 
    while(num > 1)
    {
        if(num & 1)  // 为奇数时,则减一
        {
            --num;
            un = Mul(in, un);   // 这里可以体会下为何un要被设置成单位矩阵
        }
        else
        {
            num >>= 1;
            in = Mul(in, in);
 
        }
    }
    B = Mul(in, un);
}
 
 
int main()
{
    //freopen("input.txt", "r", stdin);
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d %d", &n, &k);
        for(int i=0; i<n; ++i)
            for(int j=0; j<n; ++j)
            {
                scanf("%d", &A.ma[i][j]);
                B.ma[i][j] = 0;
                unit.ma[i][j] = (i==j);
            }
 
        fun(k);
        int ans = 0;
        for(int i=0; i<n; ++i)
            ans += B.ma[i][i];
 
        printf("%d\n", ans%MOD);
    }
}

参考了:http://www.cnblogs.com/jian1573/archive/2011/08/16/2141465.html