最近莫名其妙地喜欢上了用这种格式写各省省选的全套题解= =

今年浙江省选的出题人是算法竞赛界传说级人物陈立杰,看样子他的出题风格很有特点……ABC三题难度是严格递减的,感觉如果在做第一题的时候被卡住的话恐怕连想死的心都有了……

那么我们先从最难的一题开始……= =

BZOJ 3924 A.幻想乡战略游戏

给定一棵N个结点的有正的边权、初始点权为0的无根树,进行M次操作,每次将一个点u的权值增加e($0 \leq |e| \leq 1000$),保证任意时刻点权非负。你的任务是在每次操作后找到一个带权重心u,使得所有点到重心的距离与点权的乘积之和最小(即最小化$\sum_{v} dist(u, v) × val_v,并输出这个最小的值。

N, M均不超过${10}^5$.保证每个点的度数均不超过20.

分析.

首先我们假设每次操作过后我们可以快速地在线查询以任意一个点为关键点得到的权值和,那么在这种情况下如何求出最小权值?

为了表达方便,我们不妨设当前以点u为关键点求得的权值和为$S_u$,那么我们不难发现这样一个性质:在树上任意两点a, b之间的路径上,$S_u$构成了一个存在极小值的单峰函数。证明也很简单:考虑路径上任意一条边e,设e两端点分别为s, t,两端连接的点集分别为S, T,边权为e.v。则关键点从s走到t的过程中权值和的变化量:$$\Delta = S_t - S_s = (\sum_{u \in S} val_u - \sum_{v \in T} val_v) * e.v.$$      而在转移的过程中,点t和它的不在链上的后代结点都将从T集合转移到S集合,即 $(\sum_{u \in S} val_u - \sum_{v \in T} val_v)$ 是单调递增的,又由题意得知边权都是正整数,因此函数 $\Delta = S_t - S_s = (\sum_{t \in S} val_u- \sum_{v \in T} val_v) * e.v.$ 的零点区间一定唯一(由于$\Delta$是离散函数,这里“零点区间”指的是左右两侧函数值正负性相反的区间),且左负右正。由于$\Delta$表示的是S函数的增量,那么$\Delta$的零点区间唯一且左负右正就证明了S是存在极小值的单峰函数。

那么我们设点c为我们要求的一个带权重心。考虑树上任意一点u和它到c之间的路径,由于u的S函数取最小值,又由路径上S函数值的单峰性,我们可以证明在从u到c的路径上S值是单调递增的,而相邻两点S值相同当且仅当这两点的S值均为$S_u$,即最小值。最后这点结论可以由“零点区间连续”自然地得出。

有了这条性质,查询最小权值就好办了。我们可以在树上任取一点u将树有根化,判断它的各邻接点的S值是否小于$S_u$。若存在一点v使得$S_v < S_u$,那么根据上面的结论,我们知道答案一定在v所在的子树中,递归查询即可。若不存在这样的点v,那么答案一定是$S_u$。

听起来很爽对不对?然而,如果我们每次在树上“任取一点”,最坏情况下递归的深度可以达到$O(N)$级别,时间复杂度退化得很严重。怎么办呢?我们可以在树上找到一点u,使得以u为根最大的子树的规模最小化(一般称u为这棵树的重心)。那么这样每棵子树的规模都不会超过原树规模的1/2,那么不难证明此时递归查询的深度就成了$O(\log N)$。

再来考虑开头我们假设的我们已经会了的操作——在线查询任意一个$S_u$。

考虑我们刚才建立的重心分治结构。对点v进行修改时,我们可以花费$O(\log N)$的时间更新v所在的每一层分治结构的重心维护的答案(即在分治u维护的答案中增加$dist(u, v) * \Delta val_v$),并记录每层分治结构中的结点对上一层分治维护的答案的贡献。在对点v查询时,先将答案设为v分治中维护的答案,然后向上移动累加答案:在从分治current向它的上一层分治parent移动时,在parent维护的答案中减去current对它的贡献得到$\delta S$,将得到的结果临时当做点v的后代累加进答案。即$Ans = lastAns + \delta S + (Sum_{parent} - Sum_{current}) * dist(parent, v) $,其中$Sum_t$表示t维护的分治结构中所有点权的平凡加和。这样,我们就会做这道题了。

如果我们用倍增LCA法求dist,时间复杂度为$O((N+M) \log^3 N) $,可能有些卡常数。考虑到操作不会改变原树的结构,我们可以在$O(N \log N)$的时间内预处理后通过ST表维护DFS序列来求LCA,总时间复杂度$O((N+M) \log^2 N)$.

代码.

  1 /***********************************************************************/
  2 /**********************By Asm.Def-Wu Jiaxin*****************************/
  3 /***********************************************************************/
  4 #include <cstdio>
  5 #include <cstring>
  6 #include <cstdlib>
  7 #include <ctime>
  8 #include <cctype>
  9 #include <algorithm>
 10 using namespace std;
 11 #define SetFile(x) ( freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout) );
 12 #define UseFREAD
 13 #ifdef UseFREAD
 14 #define getc() *(file_ptr++)
 15 #define FreadLenth 5000000
 16 char CHARPOOL[FreadLenth], *file_ptr = CHARPOOL;
 17 #else
 18 #define getc() getchar() 
 19 #endif
 20 #ifdef DEBUG
 21 #include <sys/timeb.h>
 22 timeb SysTp;
 23 #endif
 24 template<class T>inline void getd(T &x){
 25     char ch = getc();bool neg = false;
 26     while(!isdigit(ch) && ch != '-')ch = getc();
 27     if(ch == '-')ch = getc(), neg = true;
';
 - ' + ch;
 30     if(neg)x = -x;
 31 }
 32 /***********************************************************************/
;
 34 typedef long long LL;
 35 
], dfs_iter;
 37 
 38 struct Node{
], *p, *Brid;
], adj_d, dep, dis, id;//用于距离查询
 41     int size;//临时变量
 42     LL Val, Sum, Cont, Ans;//树分治
 43     int AnsTag;
 44     bool tag;
 45     inline void Link(Node *t, int v){
 46         w[adj_d] = v;
 47         adj[adj_d++] = t;
 48     }
 49     void dfs();void dfs2();
 50     Node *dp(int, int &);
 51     LL Query();
 52     inline void GetAns();
][maxn<<], *Root;
 54 
 55 void Node::dfs(){
 56     (*ST)[id = dfs_iter++] = this;
 57     int i;Node *to;
;i < adj_d;++i)if((to = adj[i]) != p){
, to->dis = dis + w[i];
 60         to->dfs();
 61         (*ST)[dfs_iter++] = this;
 62     }
 63 }
 64 
 65 inline Node * Cmp(Node *a, Node *b){return a->dep > b->dep ? b : a;}
 66 
 67 inline void Build_ST(){
, j = , t = ;
 69     while(i <= dfs_iter){
;
 71         lg2[i++] = j;
 72     }
, t = ;t <= dfs_iter;++i, t <<= );j + t <= dfs_iter;++j)
][j], ST[i-][j+(t >> )]);
 75 }
 76 
 77 inline int dist(Node *a, Node *b){
 78     int u = a->id, v = b->id;if(v < u)swap(u, v);
, lg = lg2[len];
-( << lg)])->dis << );
 81 }
 82 
 83 void Node::dfs2(){
;
 85     int i;Node *to;
;i < adj_d;++i)if(!(to = adj[i])->tag && to != p){
 87         to->p = this;
 88         to->dfs2();
 89         size += to->size;
 90     }
 91 }
 92 
 93 Node * Node::dp(int psize, int &Maxsize){
 94     Node *ans = this, *to, *t;Maxsize = psize;
 95     int mx, i;
;i < adj_d;++i)if((!(to = adj[i])->tag) && to != p)
 97         Maxsize = max(Maxsize, to->size);
 98     psize += size;
;i < adj_d;++i)if((!(to = adj[i])->tag) && to != p){
         t = to->dp(psize - to->size, mx);
         if(mx < Maxsize)ans = t, Maxsize = mx;
     }
     return ans;
 }
 
 Node *Build_DC(Node *t){
     int s;t->p = NULL;
     t->dfs2();
     Node *root = t->dp(, s), *to;
     root->tag = true;root->Brid = t;
     ;i < root->adj_d;++i){
         if((to = root->adj[i])->tag)swap(root->adj[i--], root->adj[--root->adj_d]);
         else{
             root->adj[i] = Build_DC(to);
             root->adj[i]->p = root;
         }
     }
     return root;
 }
 
 inline void Modify(Node *v, int d){
     v->Sum += d;
     Node *t = v;
     LL cont;
     while(t != Root){
         LL &s_cont = t->Cont;
         t = t->p;
         t->Sum += d;
         cont = (LL)dist(v, t) * d;
         t->Val += cont;s_cont += cont;
     }
 }
 
 inline void Node::GetAns(){
     if(AnsTag == Q)return;//避免一次操作后重复查询
     Ans = Val;
     Node *t = p;
     LL sum_d = Sum, cont = Cont, diff, dsum;
     while(t){
         diff = t->Val - cont;dsum = t->Sum - sum_d;
         if(dsum)Ans += diff + dsum * dist(t, this);
         sum_d = t->Sum, cont = t->Cont;
         t = t->p;
     }
     AnsTag = Q;
 }
 
 LL Node::Query(){
     GetAns();
     int i;Node *to;
     ;i < adj_d;++i){
         (to = adj[i])->Brid->GetAns();
         if(to->Brid->Ans < Ans)return to->Query();
     }
     return Ans;
 }
 
 inline void init(){
     int i, a, b, c;
     ;i < N;++i){
         getd(a), getd(b), getd(c);
         T[a].Link(T + b, c);
         T[b].Link(T + a, c);
     }
     T[].dfs();
     Build_ST();
     (Root = Build_DC(T + ))->p = 0x0;
 }
 
 int main(){
 
 #ifdef DEBUG
     freopen("test.txt", "r", stdin);ftime(&SysTp);
     size_t Begin_sec = SysTp.time, Begin_mill = SysTp.millitm;
 #elif !defined ONLINE_JUDGE
     SetFile(zjoi15_tree);
 #endif
 #ifdef UseFREAD
     fread(file_ptr, , FreadLenth, stdin);
 #endif
 
     int u, e;
     getd(N), getd(Q);
 
     init();
 
     while(Q){
         getd(u), getd(e);
         Modify(T + u, e);
         printf("%lld\n", Root->Query());
         --Q;
     }
 
 #ifdef DEBUG
     ftime(&SysTp);
     printf("\n%.3lf sec \n", (SysTp.time - Begin_sec) + (SysTp.millitm - Begin_mill) / 1000.0);
 #endif
     ;
 }

重心分治+ST算法求LCA

BZOJ 3925 B.地震后的幻想乡

给定一个n个点m条边的无向图,每条边的权值在0~1之间随机选取,求这张图的最小瓶颈生成树的瓶颈的期望值。

点数不超过10, 保证无重边且无自环。

分析.

     需要一点点高等数学知识= =

由于题目中的最小瓶颈生成树的瓶颈大小是连续变量,我们无法通过简单地枚举答案和概率来求解。不妨这样考虑:设$F_S(x)$表示图中所有小于x的边能使点集S连通的概率。那么点集S的最小瓶颈为x的概率就是$$P_{(ans=x)} = \lim_{\Delta x \to 0} F_S(x+\Delta x) - F_S(x)$$也就是$$P_{(ans=x)} = F_S '(x) \mathrm{d} x$$

由期望的定义,我们有:$$E = \int_0^1 x * F_S ' (x) \mathrm{d} x$$是个乘积复合函数,我们对它做分部积分:$$E = \left. \left( x \int F_S '(x) \mathrm{d} x - \int (x' \int F_S '(x) \mathrm{d} x)  \right) \right|_0^1 $$得到:$$E = \left. \left( x F_S(x)  -  \int F_S(x) \mathrm{d} x \right) \right|_0^1$$那么$$E = 1 - \left.  \int F_S(x) \mathrm{d} x \right|_0^1$$

那么我们只需要用dp求出整个图的F_V函数,再积分一下就可以得到答案了。

点集连通的概率似乎没法直接求?那么我们来考虑相反的情况,点集S不连通的概率。我们可以任选一点$v_0$,枚举它所在的连通块S',并计算出S'与$S - S'$的割边数量cnt,那么$$F_S = 1 - \sum_{S' \ni v_0 \land S' \subsetneqq S} (1 - x) ^ {cnt} $$这样就可以求出答案了。

代码.

  1 #include <cstdio>
  2 #include <cstring>
  3 #include <cstdlib>
  4 #include <ctime>
  5 #include <cctype>
  6 #include <algorithm>
  7 #include <cmath>
  8 using namespace std;
  9 //#define USEFREAD
 10 #ifdef USEFREAD
 11 #define InputLen 5000000
 12 char *ptr=(char *)malloc(InputLen);
 13 #define getc() (*(ptr++))
 14 #else
 15 #define getc() (getchar())
 16 #endif
 17 #define SetFile(x) (freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout))
 18 template<class T>inline void getd(T &x){
 19     int ch = getc();bool neg = false;
 20     while(!isdigit(ch) && ch != '-')ch = getc();
 21     if(ch == '-')ch = getc(), neg = true;
';
 23     while(isdigit(ch = getc()))
 - ' + ch;
 25     if(neg)x = -x;
 26 }
 27 /***********************************************************************/
 28 #ifdef DEBUG
 29 #define __float128 double//因为蒟蒻的编译器太老了不支持__float128...
 30 #endif
 31 typedef long long LL;
 32 #include <vector>
 33 typedef vector<LL> Poly;
 34 
 35 inline void operator += (Poly &a, const Poly &b){//要求a != b
);
;i < ans.size();++i){
 38         if(i < a.size())ans[i] += a[i];
 39         if(i < b.size())ans[i] += b[i];
 40     }
 41     a = ans;
 42 }
 43 
 44 inline Poly operator * (const Poly &a, const Poly &b){
, );
 46     unsigned i, j;LL k;
;i < a.size();++i){
 48         k = a[i];
;j < b.size();++j)ans[i + j] += k * b[j];
 50     }
 51     return ans;
 52 }
 53 
 54 inline Poly operator - (const Poly &a, const Poly &b){
);
 56     unsigned i, end = min(Ans.size(), b.size());
;i < a.size();++i)Ans[i] = a[i];
;i < end;++i)Ans[i] -= b[i];
 59     return Ans;
 60 }
 61 
), True(, ), F[], Pow[];
 63 
], USet;
 65 inline void init(){
 66     int i, u, v;
 67     getd(N), getd(M);
 << N) - ;
 69     while(M--){
 70         getd(u), getd(v);
 71         --u, --v;
 << v);
 << u);
 74     }
] = , op[] = -;
] = True;
;i <= ;++i)Pow[i] = Pow[i-] * op;
 78 }
 79 
 80 inline void Calc(){
;
 82     unsigned i, end = F[USet].size();
;i < end;++i)Ans += (__float128)F[USet][i] / (i + );
 84     printf("%.6lf\n", 1.0 - (double)Ans);
 85 }
 86 
 87 #include <queue>
] = {, };//是否是包含1的连通块
 89 
 90 #ifdef DEBUG
 91 void Print(Poly x){
;i >= ;--i)printf("%d ", x[i]);
 93     putchar('\n');
 94 }
 95 #endif
 96 
 97 inline void work(){
 98     int t, i, j, b, e, cnt, it;
);
     while(!Q.empty()){
         t = Q.front();Q.pop();
         , b = ;j < N;++j, b <<= )if(t & b){
             e = adj[j];
             while(e){
                 e ^= (i = e & -e);
                 if(t & i || inc[t ^ i])continue;
                 inc[t ^ i] = true;
                 Q.push(t ^ i);
             }
         }
     }
     F[] = True;
     ;i <= USet;++i)if(inc[i]){
         ) & i;j;(--j) &= i)if(inc[j]){
             cnt = ;
             , b = ;t < N;++t, b <<= )if(j & b){
                 e = adj[t];
                 while(e){
                     e ^= (it = e & -e);
                     if((i ^ j) & it)++cnt;
                 }
             }
             F[i] += F[j] * Pow[cnt];
         }
         F[i] = True - F[i];
     }
     /*#ifdef DEBUG
     for(i = 1;i <= USet;++i)if(inc[i]){
         printf("%d: ", i);
         Print(F[i]);
     }
     #endif*/
     Calc();
 }
 
 int main(){
     #ifdef DEBUG
     freopen("test.txt", "r", stdin);
     #else       
     SetFile(zjoi15_mst);
     #endif
     #ifdef USEFREAD
     fread(ptr,,InputLen,stdin);
     #endif
     
     init();
     
     work();
     
 #ifdef DEBUG
     printf("\n%.3lf sec \n", (double)clock() / CLOCKS_PER_SEC);
 #endif
     ;
 }

概率多项式+状压dp

C.诸神眷顾的幻想乡

给定一棵N个结点的树,每个结点有一个颜色,求树上的所有路径经过的不同颜色序列的数量。

N不超过100000,保证树上的叶子结点数量不超过20,颜色值不超过10.

分析.

一道比较良心的题……保证了叶子结点不超过20个,我们就可以枚举所有的叶子,分别遍历一遍整棵树,对得到的所有序列建立多串后缀数据结构,查询不同的子串数即可。用广义SAM实现起来比较容易。

代码.

  1 /***********************************************************************/
  2 /**********************By Asm.Def-Wu Jiaxin*****************************/
  3 /***********************************************************************/
  4 #include <cstdio>
  5 #include <cstring>
  6 #include <cstdlib>
  7 #include <cctype>
  8 #include <algorithm>
  9 using namespace std;
 10 #define SetFile(x) ( freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout) );
 11 #define UseFREAD
 12 #ifdef UseFREAD
 13 #define getc() *(file_ptr++)
 14 #define FreadLenth 5000000
 15 char CHARPOOL[FreadLenth], *file_ptr = CHARPOOL;
 16 #else
 17 #define getc() getchar() 
 18 #endif
 19 #ifdef DEBUG
 20 #include <ctime>
 21 #endif
 22 template<class T>inline void getd(T &x){
 23     char ch = getc();bool neg = false;
 24     while(!isdigit(ch) && ch != '-')ch = getc();
 25     if(ch == '-')ch = getc(), neg = true;
';
 - ' + ch;
 28     if(neg)x = -x;
 29 }
 30 /***********************************************************************/
, maxs = ;
 32 typedef long long LL;
], lcnt;
 34 
 35 struct SAM{
], *link;
 37     int len;
 38     LL cnt;
], *iter = Node + ;
 40 
 41 inline SAM * insert(SAM *last, int ch){
 42     SAM *cur = iter++, *it, *s, *clone;
;
 44     it = last;
 45     while(it && !it->son[ch])it->son[ch] = cur, it = it->link;
 46     if(!it)cur->link = Node;
 47     else{
 == (s = it->son[ch])->len)cur->link = s;
 49         else{
;
 51             cur->link = s->link = clone;
 52             do{
 53                 it->son[ch] = clone;
 54                 it = it->link;
 55             }while(it && it->son[ch] == s);
 56         }
 57     }
 58     return cur;
 59 }
 60 
 61 void Build(SAM *last, int cur, int p){
 62     SAM *tmp = insert(last, col[cur]);
 63     int son;
;i < d[cur];++i)if((son = adj[cur][i]) != p)
 65         Build(tmp, adj[cur][i], cur);
 66 }
 67 
 68 inline void init(){
 69     getd(N), getd(c);
 70     size_t intsize = sizeof(int);
};
;i <= N;++i)getd(col[i]);
;i < N;++i){
 74         getd(u[i]), getd(v[i]);
 75         ++d[u[i]], ++d[v[i]];
 76     }
;i <= N;++i){
));
)leaf[lcnt++] = i;
 80     }
;i < N;++i){
 82         a = u[i], b = v[i];
 83         adj[a][it[a]++] = b;
 84         adj[b][it[b]++] = a;
 85     }
;i < lcnt;++i)Build(Node, leaf[i], );
 87 }
 88 
 89 int main(){
 90 
 91 #ifdef DEBUG
 92     freopen("test.txt", "r", stdin);
 93 #elif !defined ONLINE_JUDGE
 94     SetFile(zjoi15_substring);
 95 #endif
 96 
 97 #ifdef UseFREAD
, FreadLenth, stdin);
 99 #endif
 
     init();
     LL Ans = ;
     ;it != iter;++it)Ans += it->len - it->link->len;
     printf("%lld\n", Ans);
 
 #ifdef DEBUG
     printf("\n%.3lf sec \n", (double)clock() / CLOCKS_PER_SEC);
 #endif
     ;
 }

多串后缀自动机

另附相关资料: 出题人的题解

浙江省队选拔 ZJOI2015 (Round 1) 解题报告的更多相关文章

  1. Codeforces Round #301 解题报告

    感觉这次的题目顺序很不合理啊... A. Combination Lock   Scrooge McDuck keeps his most treasured savings in a home sa ...

  2. Codeforces Round #300 解题报告

    呜呜周日的时候手感一直很好 代码一般都是一遍过编译一遍过样例 做CF的时候前三题也都是一遍过Pretest没想着去检查... 期间姐姐提醒说有Announcement也自信不去看 呜呜然后就FST了 ...

  3. BestCoder Round #39 解题报告

    现场只做出前三题w 不过不管怎样这既是第一次认真打BC 又是第一次体验用在线编译器调代码 订正最后一题花了今天一整个下午(呜呜 收获还是比较大的^_^ Delete wld有n个数(a1,a2,... ...

  4. BestCoder Round #86 解题报告

    A.Price List Sol 求和查询 Code #include<cstdio> #include<algorithm> #include<iostream> ...

  5. Mango Weekly Training Round #6 解题报告

    比赛链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=41856#overview A.多种解法.可以dfs倒序染色,如mathlove ...

  6. Mango Weekly Training Round #3 解题报告

    A. Codeforces 92A Chips 签到题.. #include <iostream> #include <cstdio> #include <cstring ...

  7. BestCoder Round #75 解题报告

    King's Cake [思路] 递推 公式:f(n,m)=f(max(m,n-m),min(m,n-m))+1,n>m [代码] #include<cstdio> #include ...

  8. BestCoder Round #76 解题报告

    DZY Loves Partition [思路] 贪心 [代码] #include <iostream> using namespace std; typedef long long ll ...

  9. Codeforces Global Round 1 解题报告

    A 我的方法是: #include<bits/stdc++.h> using namespace std; #define int long long typedef long long ...

随机推荐

  1. imperva 网管替换

    事情是这样的 某某银行的imperva DAM审计设备出现蜂鸣的响声.经检查电源没有问题,怀疑是硬盘坏了 . 然后我就去底层查看 运行命令 :impctl platform storage raid ...

  2. avalonJS-源码阅读(二)

    上一篇文章讲述的avalon刷页面所用到的几个函数.这篇则是主要讲avalon对刷DOM刷出来的avalon自定义属性如何处理的. 目录[-] avalon页面处理(2) 数据结构 解析avalon标 ...

  3. Access中替代case when的方法 .

    最近在做一个用Access的东东,其中用到了case when的方式,但是Access是不支持这种语法的,查询知道IIf和Swith可以作为替代,总结如下: IIf(expr, truepart, f ...

  4. 四、springcloud之服务调用Feign(二)

    一.Fegin的常见应用 Feign的Encoder.Decoder和ErrorDecoder Feign将方法签名中方法参数对象序列化为请求参数放到HTTP请求中的过程,是由编码器(Encoder) ...

  5. JS动态创建元素(两种方法)

    前言 创建元素有两种方法 1)将需要创建的元素,以字符串的形式拼接:找到父级元素,直接对父级元素的innnerHTML进行赋值. 2)使用Document.Element对象自带的一些函数,来实现动态 ...

  6. Javascript之对象的创建

    面向对象语言有一个非常显著的标志,那就是它们都有类的概念,通过类之间的继承就可以达到任意创建具有相同属性方法的对象.而在ECMAScript中并没有类的概念,它把对象定义为:无序属性的集合,其属性包含 ...

  7. javaweb作业一

    作业:Http全称叫什么?有什么特点?端口号是多少?超文本传输协议:(1)遵循请求/响应模型(2)http协议是一种无状态协议,请求/响应完成后,连接会断开.这时,服务器无法知道当前访问的用户是否是老 ...

  8. Django API验证(令牌)

    1. 获取接口信息 Client端 import requests import time import hashlib ctime = time.time() key = 'akfljakfjakl ...

  9. CVE-2013-3346Adobe Reader和Acrobat 内存损坏漏洞分析

    [CNNVD]Adobe Reader和Acrobat 内存损坏漏洞(CNNVD-201308-479) Adobe Reader和Acrobat都是美国奥多比(Adobe)公司的产品.Adobe R ...

  10. 20165333 预备作业3 Linux安装及学习

    预备作业3 Linux安装及学习 Linux系统安装 在老师的教程帮助下成功的完成了虚拟机的安装,但安装过程中也遇到了一些问题.在下载ubuntu时,总是下载失败,在求助同学后,在中文版官网的网址,才 ...