在比赛开始30分钟内依次A了10,7,3,一个小时左右A了11,然后就再也没有写出任何一道题。。。

其实比赛过程中心态有很大的问题,我一直在5上面钻牛角尖,耗费了太多时间。

基本上比赛后半程三个人都在看2,5两道题,其他题目几乎没看。

到最后基本没有做下去的欲望了,可能是因为是女队压力比较小吧(不,是因为我比较菜)。。

以及网络赛的排行榜真的很迷。。第2题min25筛一堆人过。。然而队里三个人甚至都没有听说过这玩意。。

(226大佬7题,ORZ)

1002 Graph Theory Class

题意:在一个有n个点的图中,图中点1~n编号。对于i,j之间的一条边,它的权重为lcm(i+1,j+1),求这个图的最小生成树大小。

思路:很明显对于(j+1)为质数的情况,j应该与1连接,权重为2*(j+1);

对于(j+1)不是质数的情况,j可以与任意一个满足i+1==factor(j+1)的i连接,factor(j+1)指j+1的因子,权重为j+1。

于是最小生成树的大小为(3~n+1以内所有质数)*2+(3~n+1以内所有非合数),即(3~n+1所有数之和)+(3~n+1以内所有质数之和)

前者可以用等差数列求和计算,(n+4)*(n-1)/2;由于n<=1010,后者可以使用min25筛计算。

min25筛,可以在的前缀和。

(积性函数,指对于所有互质的整数a和b有性质f(ab)=f(a)f(b)的函数)

(代码待补充

1003 Express Mail Taking

题意:有n个保险柜,编号为1~n,每两个相邻编号的保险柜之间的距离为1,第k个保险柜用来打开其他保险柜(每次只能同时打开一个保险柜)。从1出发,需要从m个保险柜中取东西后再从1离开。问距离最短的路线长度。

思路:一开始理解错了题意,以为只要到达第k保险柜后其他保险柜就打开了,就WA了一次。

对于m个要取东西的柜子,除了最后一个柜子有可能不需要返回k柜,对于其他柜子,都必须在该柜子与k柜之间走一个来回。

于是找到m个柜子中最小的一个x,若x比k小,则将该点删去(在回1点的路上就可到达,对距离无贡献)

接着对剩下的每个柜子i,贡献2*abs(i-k)的答案。

再加上出发和结束的2*(k-1),就是答案。

#include<cstdio>
#include<cstring>
#include<algorithm> 
using namespace std;
typedef long long ll;
const int maxn=2000005;
int a[maxn];
int main()
{
    int i,T,n,m,k,mi;
    ll ans;
    scanf("%d",&T);
    while (T--)
    {
        scanf("%d%d%d",&n,&m,&k);
        ans=2ll*(k-1);
        mi=k;
        for (i=1;i<=m;i++) 
        {
            scanf("%d",&a[i]);
            ans+=2ll*abs(a[i]-k);
            if (a[i]<mi) mi=a[i];
        }
        if (mi!=k) ans-=2ll*abs(mi-k);
        printf("%lld\n",ans);
     } 
    return 0;
} 
View Code

相关文章:

  • 2022-12-23
  • 2021-07-14
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-16
  • 2021-07-25
  • 2021-04-22
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-02-04
  • 2021-09-22
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案