codeforces Goodbye2014

  2014年最后一场codeforces,不能更逗比==

  手速好慢,搭配上这个网速,再加上自己煞笔思考速度,尼玛简直了,造就了我史上降分最多,差点跌破紫名TAT。

  因为手速问题,A到10+min才pass。。。

  然后苦逼的B题,要求满足可交换矩阵交换后字典序最小,想到是从小到大将数尽可能的往前移,然后就是实现,我是从1到它自己的位置,只要比它小然后能交换那么交换,继续寻找知道木有~在1小时+这样pass后总感觉怪怪的==果不其然,在C过了不一会就被hack了,于2小时这样被hack,然后发现可以先往后移再往前移,于是这样就要对矩阵进行预处理,我先打了一个floyd传递可交换性,wst当时在旁边看了一下然后说貌似只能传递一次,我想想也是哦,然后没有提交立马删了floyd预处理。然后打了一个并查集,打完之后想会不会交换后就没法更改了汗==然后删了并查集。接着打了一个暴力dfs预处理,打完之后还剩一分钟,坑逼网点了一分钟木有反应gg。

 赛后等到3点多重判完交了第一发dfs没交上的版本AC:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 using namespace std;
 5 struct dian{
 6   int num,id;
 7 }a[10005];
 8 int n;
 9 int g[305][305],b[305],f[305];
10 int cmp(dian n1,dian n2)
11 {
12   return n1.num<n2.num;
13 }
14 void dfs(int root,int tmp)
15 {
16   g[root][tmp]=g[tmp][root]=1;
17   for (int i=1;i<=n;i++)
18     if (g[tmp][i]&&g[root][i]==0)
19     {
20       dfs(root,i);
21     }
22 }
23 int main()
24 {
25   int i,j,x,y,k,t;
26   scanf("%d",&n);
27   for (i=1;i<=n;i++)
28   {
29     scanf("%d",&b[i]);
30     a[i].num=b[i];
31     a[i].id=i;
32   }
33   sort(a+1,a+n+1,cmp);
34   for (i=1;i<=n;i++)
35     f[a[i].id]=i;
36   for (i=1;i<=n;i++)
37     for (j=1;j<=n;j++)
38     {
39       scanf("%1d",&g[i][j]);
40     }
41   for (i=1;i<=n;i++)
42     for (j=1;j<=n;j++)
43       if (g[i][j])
44     dfs(i,j);
45   for (i=1;i<=n;i++)
46   {
47     for (k=1;k<=n;k++)
48     for (j=1;j<a[i].id;j++)
49       if (g[j][a[i].id]&&b[j]>b[a[i].id])
50       {
51         swap(b[j],b[a[i].id]);
52         y=a[i].id; a[i].id=j;
53         a[f[j]].id=y;
54         t=f[j]; f[j]=f[y]; f[y]=t;
55       }
56   }
57   for (i=1;i<n;i++)
58     printf("%d ",b[i]);
59   printf("%d\n",b[n]);
60 }
View Code

第二天过来交了floyd的第一个版本AC:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 using namespace std;
 5 struct dian{
 6   int num,id;
 7 }a[10005];
 8 int n;
 9 int g[305][305],b[305],f[305];
10 int cmp(dian n1,dian n2)
11 {
12   return n1.num<n2.num;
13 }
14 int main()
15 {
16   int i,j,x,y,k,t;
17   scanf("%d",&n);
18   for (i=1;i<=n;i++)
19   {
20     scanf("%d",&b[i]);
21     a[i].num=b[i];
22     a[i].id=i;
23   }
24   sort(a+1,a+n+1,cmp);
25   for (i=1;i<=n;i++)
26     f[a[i].id]=i;
27   for (i=1;i<=n;i++)
28     for (j=1;j<=n;j++)
29     {
30       scanf("%1d",&g[i][j]);
31     }
32   for (i=1;i<=n;i++)
33     for (j=1;j<=n;j++)
34       for (k=1;k<=n;k++)
35       {
36         if (g[i][j]&&g[k][j]) g[i][k]=g[k][i]=1;
37         if (g[i][j]&&g[i][k]) g[j][k]=g[k][j]=1;
38         if (g[k][i]&&g[k][j]) g[i][j]=g[j][i]=1;
39       }
40   for (i=1;i<=n;i++)
41   {
42     for (k=1;k<=n;k++)
43     for (j=1;j<a[i].id;j++)
44       if (g[j][a[i].id]&&b[j]>b[a[i].id])
45       {
46         swap(b[j],b[a[i].id]);
47         y=a[i].id; a[i].id=j;
48         a[f[j]].id=y;
49         t=f[j]; f[j]=f[y]; f[y]=t;
50       }
51   }
52   for (i=1;i<n;i++)
53     printf("%d ",b[i]);
54   printf("%d\n",b[n]);
55 }
View Code

随后是期间被自己傻逼否定的并查集版本AC:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 using namespace std;
 5 struct dian{
 6   int num,id;
 7 }a[10005];
 8 int n;
 9 int g[305][305],b[305],f[305],father[305];
10 int cmp(dian n1,dian n2)
11 {
12   return n1.num<n2.num;
13 }
14 int find(int x)
15 {
16   if (father[x]!=x) father[x]=find(father[x]);
17   return father[x];
18 }
19 int main()
20 {
21   int i,j,x,y,k,t;
22   scanf("%d",&n);
23   for (i=1;i<=n;i++)
24   {
25     scanf("%d",&b[i]);
26     a[i].num=b[i];
27     a[i].id=i;
28     father[i]=i;
29   }
30   sort(a+1,a+n+1,cmp);
31   for (i=1;i<=n;i++)
32     f[a[i].id]=i;
33   for (i=1;i<=n;i++)
34     for (j=1;j<=n;j++)
35     {
36       scanf("%1d",&g[i][j]);
37       if (g[i][j]&&find(i)!=find(j))father[find(i)]=find(j);
38     }
39   for (i=1;i<=n;i++)
40   {
41     for (k=1;k<=n;k++)
42     for (j=1;j<a[i].id;j++)
43       if (find(j)==find(a[i].id)&&b[j]>b[a[i].id])
44       {
45         swap(b[j],b[a[i].id]);
46         y=a[i].id; a[i].id=j;
47         a[f[j]].id=y;
48         t=f[j]; f[j]=f[y]; f[y]=t;
49       }
50   }
51   for (i=1;i<n;i++)
52     printf("%d ",b[i]);
53   printf("%d\n",b[n]);
54 }
View Code

哎说到底就是弱,哪来那么多理由TAT

C是个贪心,只要想到最忧顺序就是给的顺序代码就很好写了==

D比赛时没时间看了,赛后补了一发:http://www.cnblogs.com/xiao-xin/articles/4196009.html

最近比赛都没怎么补题,快期末了,期末考完再说吧TUT

题目链接:http://codeforces.com/contest/500

posted on 2014-12-31 16:31  xiao_xin  阅读(154)  评论(0编辑  收藏  举报

导航