CCPC2020网络赛总结

我们队解出了三道题:1003、1007、1010

1011题做了一个多小时,卡在了第二个样例上面,也就是对t趋近于无穷时的处理上面,思考的思路一直是怎样用程序在数学上处理一个数趋向于无穷,看了题解才发现思路就错了,其实还是找规律。启发:如果在某一个题上卡的时间过长,要及时更换思路,用新的方法解题。

1007题,开始读了半天没读懂题意,就直接放弃了,后来是李勇麒通过观察样例发现了规律,原来读不懂题意也能AC!启发:如果一个题的通过人数很多,但又读不懂题意,可以直接研究样例,通过样例找规律写程序。

1010题,直接模拟,直接过。

下面是1003的代码和思路:

Problem 1003:

根据题意,可以将快递所在的快递柜分成两部分,一部分是在特殊快递柜前面的快递柜,另一部分是在特殊快递柜后面的快递柜。对于在后面的快递柜,我们可以发现无论先取哪一个快递,最终所花费的距离都是一样的;而对于在前面的快递,只有按照编号从大到小的顺序取快递所花费的距离才是最小的。

代码如下:

#include<bits/stdc++.h>

using namespace std;

#define ll long long

ll a[1000000+8];

int main()

{

    int t,i,j,m;

    ll n,k;

    cin>>t;

    while(t--)

    {

        ll dis=0;

        scanf("%lld%d%lld",&n,&m,&k);

        for(i=0;i<m;i++)

        {

            scanf("%lld",&a[i]);

        }

        sort(a,a+m);

        dis=k-1;

        for(i=m-1;i>=1;i--)

        {

            if(a[i]>k)

            {

                dis+=a[i]-k;

                dis+=a[i]-k;

            }

            else

            {

                dis+=k-a[i];

                dis+=k-a[i];

            }

        }

        if(a[0]<k)

        {

            dis+=k-1;

        }

        else

        {

            dis+=a[0]-k;

            dis+=a[0]-1;

 

        }

        printf("%lld\n",dis);

    }

   return 0;

}

 

posted @ 2020-09-26 19:26  chengxvzhishen  阅读(228)  评论(0编辑  收藏  举报