Codeforces 427E Police Patrol

6428 단어 codeforces
중간의 수를 찾아서 양쪽에서 꺼내세요.
#include<stdio.h>
const int MAX = 1001000;
int pos[MAX];
int main()
{
    int n,m,tmp;
    int i;
    int pol;
    long long ans,dis;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        for(i=1;i<=n;i++)
            scanf("%d",&pos[i]);
        pol=n/2+1;
        tmp=m;
        ans=0;
        for(i=1;i<=pol;)
        {
            dis=0;
            while(i<=pol&&tmp--)
            {
                if(!dis)dis=pos[pol]-pos[i];
                i++;
            }
            ans=ans+dis*2;
            tmp=m;
        }
        for(i=n;i>pol;)
        {
            dis=0;
            while(i>pol&&tmp--)
            {
                if(!dis)dis=pos[i]-pos[pol];
                i--;
            }
            ans=ans+dis*2;
            tmp=m;
        }
        printf("%I64d
",ans); } return 0; }

더욱 간결한 코드
1<<n    1   N 
m>>=1    m= m>>1,   m  1 
#include <stdio.h>
using namespace std;
const int MAX_N = 1000000 + 100;
int n, m;
int arr[MAX_N];
int main()
{
    scanf("%d %d", &n, &m);
    for(int i = 0; i < n; i++)
        scanf("%d", &arr[i]);
    int mid = n >> 1;
    //printf("mid:%d
",mid);
long long res = 0; for(int i = n - 1; i > mid; i -= m) res += arr[i] - arr[mid]; for(int i = 0; i < mid; i += m) res += arr[mid] - arr[i]; res = res << 1; printf("%I64d
", res); return 0; }

좋은 웹페이지 즐겨찾기