Elimizde; "1 5 7 4 4 3" gibi bir dizi olduğunu varsayalım
Burda 1-7,5-3 ve 4-4 ün toplamı 8 ediyor. Soruda çiftlerin toplamının eşit olduğu sayıların indekslerini yazdırmamız isteniyor.
Örneğin yukardaki dizi için doğru cevap:
1 3 (1 ve 7'nin indeksleri)
6 2 (3 ve 5'nin indeksleri)
4 5 (4 ve 4'nin indeksleri)
Ben bu soruyu D nin çok beğendiğim topNIndex metodu yardımı ile çözdüm. Eğer eşit olan sayı çiftleri varsa en büyük+en küçük, 2. en büyük + 2. en küçük olduğunu gözlemliyerek algoritmamı şöyle yazdım :
const kardSayisi = stdin.readln.strip.to!size_t;
auto numaralar = stdin.readln.strip.split().map!(a => to!int(a)).array();
int[] siralanmisIndexDizisi = new int[kardSayisi];
topNIndex(numaralar, siralanmisIndexDizisi, SortOutput.yes);
for ( int i = 0; i < kardSayisi/2; i++ )
{
writeln( min(siralanmisIndexDizisi[i], siralanmisIndexDizisi[ kardSayisi - 1 - i ]) + 1, " ", max( siralanmisIndexDizisi[i], siralanmisIndexDizisi[ kardSayisi - 1 - i ] ) + 1 );
}
Bir yorumunuz olurmu, mesela şu topNIndex metoduna new ile bir array göndermek pek hoşuma gitmiyor bir çözümünüz varmıdır? Sorunun tamamı "http://codeforces.com/contest/701/problem/A"'dan görünebilir.
Sevgiler herkese
Erdemdem
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
Permalink
Reply