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
0 oy
113 gösterim
algoritmasını kuramadım, çözümleri var ama tam olarak anlayamadım
C/C++ kategorisinde (102 puan) sordu

1 cevap

0 oy

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);
(161 puan) cevapladı

İlgili sorular

0 oy
1 cevap 43 gösterim
0 oy
1 cevap 16 gösterim
16 gösterim 28 Mart C/C++ kategorisinde irem_U (108 puan) sordu
0 oy
1 cevap 22 gösterim
0 oy
1 cevap 71 gösterim
71 gösterim 12 Mart 2017 C/C++ kategorisinde yaren_tok (102 puan) sordu
0 oy
1 cevap 114 gösterim
114 gösterim 21 Ocak 2016 C/C++ kategorisinde hasscript (131 puan) sordu
...