Сортировка смежных различий - PullRequest
0 голосов
/ 18 апреля 2020

Я наткнулся на ответ на этот вопрос, и я не понимаю, как он работает для части со значением k и операцией if (i & 1). Вопрос: https://codeforces.com/contest/1339/problem/B

Решение: https://codeforces.com/contest/1339/submission/76435784

    int main(){
    int t;scanf("%d",&t);
    while(t--){
        memset(a,0,sizeof(a));
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        sort(a+1,a+1+n);

// В этой части мне нужна помощь по

        for(int k=(n+1)/2,i=0;i<n;i++){
            if(i&1)//What does this do{
                printf("%d ",a[k+i]);
                k+=i;// why k has to changed ;
            }
            else{
                printf("%d ",a[k-i]);
                k-=i;
            }
        }
    }
    return 0;
} 
 

1 Ответ

0 голосов
/ 18 апреля 2020
  1. Сначала отсортируйте входной массив.
  2. Теперь начните со среднего элемента (kth). Разница между k-м и (k + 1) -ым элементом всегда будет меньше, чем разница между (k + 1) и (k-1) -ым элементом.
  3. Используйте эту логику c и сначала напечатайте kth элемент, затем выведите (k + 1) -ый, затем (k-1) -й, затем (k + 2) -й, (k-2) -й и т. д.

Также & является побитовым оператором. Пожалуйста, узнайте больше об этом и его использовании, чтобы узнать, является ли число нечетным или четным.

...