20140705总结

这次目测没有机会写解题报告了。

我就大概说一下,我的过程和我的WAcode。

第一题,我一直觉得自己是正解,然后莫名其妙wa了。我也想到了二分答案,然后枚举边。但是我觉得我的二分跟翔一样,然后我又觉得自己的枚举边+枚举点是对的。所以就没写二分。。。(┬_┬)  o(╯□╰)o           我的做法是枚举一条边,然后枚举一个点,比较它到两个点的距离,维护到较小值的端点的较小值的最大值,然后寻找边上哪一点的最大值最小。。

第二题 看了一下题,觉得是最长上升子序列,就是说如果ai=bj=bk 那么我一定会删除下标较小的。。然后开始二分e??又是二分??

第三题 应该是dp,dp[i]表示gcd为i至少要多少个数,转移方程显而易见:dp[gcd(i,am)]=min(*,dp[i]+1);

 

最后总结一下这次考试,我悟出了七字真言:

黑暗算法平安保!

完结,撒花。

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 int a[201][201];
 6 int b[201][201];
 7 int dis[201];
 8 int N,M;
 9 int U,V,W;
10 int main()
11 {
12     double ans=1E9;
13     memset(a,-1,sizeof(a));
14     memset(b,-1,sizeof(b));
15     freopen("testA.in","r",stdin);
16     freopen("testA.out","w",stdout);
17     cin>>N>>M;
18     for(int i=1;i<=N;i++)
19     {
20         a[i][i]=0;
21         b[i][i]=0;
22     }
23     for(int i=1;i<=M;i++)
24     {
25         scanf("%d%d%d",&U,&V,&W);
26         if(a[U][V]!=-1)
27         {
28             a[U][V]=min(a[U][V],W);
29             a[V][U]=min(a[V][U],W);
30             b[U][V]=min(b[U][V],W);
31             b[V][U]=min(b[V][U],W);
32         }
33         else
34         {
35             a[U][V]=W;
36             a[V][U]=W;
37             b[U][V]=W;
38             b[V][U]=W;
39         }
40     }
41     for(int k=1;k<=N;k++)
42         for(int i=1;i<=N;i++)
43             for(int j=1;j<=N;j++)
44                 if((a[i][k]!=-1)&&(a[k][j]!=-1)&&(a[i][j]==-1||a[i][j]>a[i][k]+a[k][j]))
45                 {
46                     a[i][j]=a[i][k]+a[k][j];
47                 }
48     long long x=0,y=0;
49     for(int i=1;i<=N;i++)
50         for(int j=i+1;j<=N;j++)
51             if(b[i][j]!=-1)
52             {
53                 x=0,y=0;
54                 for(int k=1;k<=N;k++)
55                 {
56                     if(a[i][k]!=-1&&(a[i][k]<a[k][j]||a[k][j]==-1)&&x<a[i][k])
57                         x=a[i][k];
58                     if(a[j][k]!=-1&&(a[j][k]<a[k][i]||a[k][i]==-1)&&y<a[j][k])
59                         y=a[j][k];
60                 }
61                 if(x-y>b[i][j]&&ans>(x))
62                     ans=(double)(x);
63                 if(y-x>b[i][j]&&ans>(y))
64                     ans=(double)(y);
65                 if(x-y<=b[i][j]&&y-x<=b[i][j]&&ans>((x+y+b[i][j])/2))
66                     ans=(double)(x+y+b[i][j])/2;
67             }
68     printf("%.2lf\n",ans);
69 }
Code testA
 1 #include<cstdio>
 2 using namespace std;
 3 int main()
 4 {
 5     int n,m,s,e;
 6     freopen("testB.in","r",stdin);
 7     freopen("testB.out","w",stdout);
 8     scanf("%d %d %d %d", &n, &m, &s, &e);
 9     printf("%d\n", s/e);
10 }
Code testB
 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int a[1000];
 5 int gcd(int a,int b)
 6 {
 7     while(b!=0)
 8     {
 9         a%=b;
10         a^=b;
11         b^=a;
12         a^=b;
13     }
14     return a;
15 }
16 int main()
17 {
18     int n;
19     freopen("testC.in","r",stdin);
20     freopen("testC.out","w",stdout);
21     cin>>n;
22     for(int i=1;i<=n;i++)
23         cin>>a[i];
24     int k=a[1];
25     int m;
26     for(int i=2;i<=n;i++)
27     {
28         m=a[i];
29         k=gcd(k,m);
30     }
31     long long ans=0;
32     for(int i=1;i<=m;i++)
33         if(k==a[i])
34             ans=n-1;
35     if(ans==n-1)
36     {
37         cout<<ans<<endl;
38         return 0;
39     }
40     for(int i=1;i<=m;i++)
41         for(int j=1;j<=m;j++)
42             if(k==gcd(a[i],a[j]))
43                 ans=n-2;
44     cout<<ans<<endl;
45     return 0;
46 }
Code testC

转载于:https://www.cnblogs.com/JackSlowFuck/p/3826776.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值