Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi

Sorunuz mu var? Belki de çoktan soruldu..

0
https://www.hackerrank.com/challenges/new-year-chaos bu sitedeki soruya el atacak arkadaş var mıdır( soru ingilizcedir)

Açık 1 Cevaplar 103 Gösterim C/C++
algoritmasını kuramadım, çözümleri var ama tam olarak anlayamadım

1 cevap

0

Selamlar,

Benim bu probleme yaklasimim su sekilde oldu:

- Oncelikle siradaki kisiler uzerinden tek tek gideriz.

- Her kisi orjinal pozisyonundan ne kadar uzak diye bakariz. Orjinal pozisyondan 3 veya daha fazla uzakta olan birisi varsa bu problem kaotiktir. Dolayisiyla hicbirsey yapmadan cikariz. Eger uzaklik 2 veya daha az ise, her bir kisi icin uzakliklari toplariz.

- En son uzaklik toplamlarini ikiye boleriz cunku tek bir degisimi iki kere saymis olduk.

Ornek uzerinden gidersek:

2 1 5 3 4
> 2 pozisyonuna 1 birim uzaklikta
> 1 pozisyonuna 1 birim uzaklikta
> 5 pozisyonuna 2 birim uzaklikta

> 3 pozisyonuna 1 birim uzaklikta

> 4 pozisyonuna 1 birim uzaklikta

 1+1+2+1+1=6 (uzakliklar toplami)

Bunu ikiye bolersek bizden istenen sonuc olan 3'u elde ederiz.

Neden ikiye boluyoruz? Cunku 1 ve 2 icin orjinal uzakliklarina 1 birim uzaklikta dedik ve uzaklik toplamlari 1+1=2 oldu. Ama biz aslinda ikisinin yerini tek bir seferde degistirebiliriz.

Ikinci ornek senaryoya bakalim: 2 5 1 3 4

> 2 pozisyonuna 1 birim uzaklikta
> 5 pozisyonuna 3 birim uzaklikta ve bu 2'den buyuk. O zaman bu kaotik bir durumdur.
Ustteki algoritma su sekilde oluyor:
            // your code goes here
            int totalDistance=0;
            
            for(int q_i=0; q_i < n; q_i++){
                int distance = Math.abs(q_i+1-q[q_i]);
                if(distance>2) {
                    System.out.println("Too chaotic");
                    break;
                }
                
                totalDistance += distance;
            }
            
            int countBribe = totalDistance/2;
            System.out.println(countBribe);
15 Nisan 2017 ahmetbombaci (159 puan) cevapladı
...