Çok güzel soruymuş. Tek boyutlu dizi hareket kabiliyetini azaltır. İki boyutlu dizi ile gitsen, sadece i değil j seçeneğin de olur, karşılaştırma yaparken falan rahat edersin. Ayrıca String concatenation ile StringBuilder. append karşılaştırmasında genel olarak pek de bir fark yokmuş. http://stackoverflow.com/questions/1532461/stringbuilder-vs-string-concatenation-in-tostring-in-java Ama StringBuffer vs StringBuilder denirse, StringBuilder daha performanslı. Sen hiç kaval çaldın mı?

Problemi okuyunca aklıma ilk gelen çzüm her noktanın hangi kşegende olduğunu bulmak oldu. Bir çizim yapıp aynı kşegen üzerindeki noktaları yazınca bir rüntü fark ettim. Aşağıdaki fotoğrafta grebilirsin bunu. https://www.dropbox.com/s/92zle1epcl363ij/20160201_204728. jpg?dl=0 Buna gre yalancı kod yazacağım. Java'da yazıp sonucu bildirir misin? Kşegen1 ve Kşegen2 1997 elemanlı arrayler. Bu arraylerin her bir elemanı da o kşegendeki noktaları tutan arrayler. Kşegen1 toplamla elde edilen, kşegen2 de farkla elde edilen kşegeni tutuyor. x tüm x'lerin arrayi y tüm y'lerin arrayi her n noktası için index1 = x +y - 2 index2 = x -y +999 kşegen1 . ekle kşegen2 . ekle sayac = 0 kşegen1 içerisindeki her bir array a için sayac += a. size kşegen2 içerisindeki her bir array a için sayac += a. size İndexler 1den başlayacak şekilde tasarlandı. Veri yapılarını kafana gre ayarla. Bir de tahta 1000x1000 olacak şekilde değerleri seçtim. O o da yaklaşık O(n+2000)

Soruyu yazabilir misin hocam? Koddan bakıp çıkamadım işin içinden. Ayrıca soru hakkında hiçbir şey bilmeden yapacağım yorum da şu olur: neden int arr = new int ; ? http://codeforces.com/contest/621/problem/B

O(n^2) den kurtulmanın tek yolu brute-force yapmaktan vazgeçmek. Onun için de matematiksel bir formül bulmak gerekir. Şuan istediğin şey mevcut kodun hızlandırılması mı complexity düşürülmesi mi ona gre cevap vericem. Ben soruya baktığımda brute force ile yapılamayacağını nasıl anlamadım da bu kodu yazdım ona şaşırıyorum.

edit: iki defa atmış whopper tarafından 01/Şub/16 14:36 tarihinde düzenlenmiştir

Millet selamlar çzdüğüm bir soruda iç içe for-while loop kullandım. Test caselerde 200 bin koordinat verince time exceeding yiyorum. O(n2) den kurtulmak için aklınıza gelen başka çzüm var mı? O nested yerine başka bir yapı var mı alternatif, beynim durdu? package codeforces; import java. util. ; public class WSandBishopsB { public static void main { // TODO Auto-generated method stub Scanner key = new Scanner ; int bishnum = key. nextInt ; int arr = new int ; int sayac=0; for(int i=0;i<bishnum 2;i++) for(int m=0;m<bishnum 2-1;m++){ int x=arr ; int y=arr ; int d=m; System. out. println ; while(d<bishnum 2-2){ if(Math. abs(arr -x) Math. abs(arr -y)) d+=2; } m++; } System. out. println ; key. close ; } } input 51 11 53 35 15 5 output 6

Edit: Ben olayı komple yanlış anlamışım. S2kucuk tarafından 01/Şub/16 19:26 tarihinde düzenlenmiştir

O(n^2) den kurtulmanın tek yolu brute-force yapmaktan vazgeçmek. Onun için de matematiksel bir formül bulmak gerekir. Şuan istediğin şey mevcut kodun hızlandırılması mı complexity düşürülmesi mi ona gre cevap vericem.

abi biri bana açıklayabilir mi bu amk kodu 30. satırda nasıl division by zero verebiliyor. orayı 0 yapan şeyler 0,1,2 onlarında koşulu var zaten benim mi beynim durdu. Bu arada gayet hızlı çalışıyor çzüm bu sağol ultralover package codeforces; import java. util. Scanner; public class WSBishopB2 { public static void main { Scanner key = new Scanner ; int bishnum = key. nextInt ; int arr = new int ; for(int i=0;i<bishnum;i++){ int a = key. nextInt ; int b = key. nextInt ; if(a-b<0) else } int total=0; for(int i=0;i<bishnum 2;i++){ if(arr !=0) } System. out. println ; key. close ; } public static int factorial { int fact = 1; for (int i = 1; i <= n; i++) return fact; } } whopper tarafından 02/Şub/16 10:55 tarihinde düzenlenmiştir

O satırda factorial(2) yerine doğrudan 2 yazarak biraz daha performans kazanabilirsin. Ayrıca problem senin factorial metodundan kaynaklı. Büyük sayılar için o metod mutlaka sıfır dner. Mesela factorial (1000). Bunun sebebi de integer tipinin tutabileceği sayının uzunluğu. Integer overflow ve underflow terimlerine bir bak derim. Mesela şu kod blogunun çıktısına bakalım: for (int i = 0; i < 40; i++) Şyle olacaktır: 0 :: 11 :: 12 :: 23 :: 64 :: 245 :: 1206 :: 7207 :: 50408 :: 403209 :: 36288010 :: 362880011 :: 3991680012 :: 47900160013 :: 193205350414 :: 127894528015 :: 200431001616 :: 200418918417 :: -28852224018 :: -89843302419 :: 10964172820 :: -210213273621 :: -119511449622 :: -52271513623 :: 86245376024 :: -77594624025 :: 207618048026 :: -185388236827 :: 148478361628 :: -137573171229 :: -124151398430 :: 140928614431 :: 73819750432 :: -214748364833 :: -214748364834 :: 035 :: 036 :: 037 :: 038 :: 039 :: 0 Sen hiç kaval çaldın mı?

Problemi okuyunca aklıma ilk gelen çzüm her noktanın hangi kşegende olduğunu bulmak oldu. Bir çizim yapıp aynı kşegen üzerindeki noktaları yazınca bir rüntü fark ettim. Aşağıdaki fotoğrafta grebilirsin bunu. https://www.dropbox.com/s/92zle1epcl363ij/20160201_204728. jpg?dl=0 Buna gre yalancı kod yazacağım. Java'da yazıp sonucu bildirir misin? Kşegen1 ve Kşegen2 1997 elemanlı arrayler. Bu arraylerin her bir elemanı da o kşegendeki noktaları tutan arrayler. Kşegen1 toplamla elde edilen, kşegen2 de farkla elde edilen kşegeni tutuyor. x tüm x'lerin arrayi y tüm y'lerin arrayi her n noktası için index1 = x +y - 2 index2 = x -y +999 kşegen1 . ekle kşegen2 . ekle sayac = 0 kşegen1 içerisindeki her bir array a için sayac += a. size kşegen2 içerisindeki her bir array a için sayac += a. size İndexler 1den başlayacak şekilde tasarlandı. Veri yapılarını kafana gre ayarla. Bir de tahta 1000x1000 olacak şekilde değerleri seçtim. O o da yaklaşık O(n+2000) Düşününce fark ettim ki direk toplamak olmuyor kombinasyon hesaplamak lazım. Bir kşegen üzerinde k tane bishop olsun, kombinasyon(k,2) bize tüm ikilileri verecektir.

uLtRaLoVeR bunu yazdı Problemi okuyunca aklıma ilk gelen çzüm her noktanın hangi kşegende olduğunu bulmak oldu. Bir çizim yapıp aynı kşegen üzerindeki noktaları yazınca bir rüntü fark ettim. Aşağıdaki fotoğrafta grebilirsin bunu. https://www.dropbox.com/s/92zle1epcl363ij/20160201_204728. jpg?dl=0 Buna gre yalancı kod yazacağım. Java'da yazıp sonucu bildirir misin? Kşegen1 ve Kşegen2 1997 elemanlı arrayler. Bu arraylerin her bir elemanı da o kşegendeki noktaları tutan arrayler. Kşegen1 toplamla elde edilen, kşegen2 de farkla elde edilen kşegeni tutuyor. x tüm x'lerin arrayi y tüm y'lerin arrayi her n noktası için index1 = x +y - 2 index2 = x -y +999 kşegen1 . ekle kşegen2 . ekle sayac = 0 kşegen1 içerisindeki her bir array a için sayac += a. size kşegen2 içerisindeki her bir array a için sayac += a. size İndexler 1den başlayacak şekilde tasarlandı. Veri yapılarını kafana gre ayarla. Bir de tahta 1000x1000 olacak şekilde değerleri seçtim. O o da yaklaşık O(n+2000) Düşününce fark ettim ki direk toplamak olmuyor kombinasyon hesaplamak lazım. Bir kşegen üzerinde k tane bishop olsun, kombinasyon(k,2) bize tüm ikilileri verecektir. aynen yle reyiz çzüm bu son dediğin gibi olacak. kombinatorik. mevzusu. Dediğin yolu bi implement edeyim bakayım. whopper tarafından 02/Şub/16 09:37 tarihinde düzenlenmiştir

benzer bir problem var hocam burada http://stackoverflow.com/questions/34446707/why-is-my-program-exceeding-the-time-limit alltaki cevap muhtemelen senin de çzümündür.. ayrıca sitedeki rnekte stringbuilgder kullanılmış, sen de ekrana yazdırmak yerine dnen değeri string builder e at, işlem bitince yazdırırsın.. Diğer türlü sürekli ekrana yazdırmak doğru değil. hacı ben string example+="xyz"; tarzında bir kullanımdan doğan bi verimsizlikte stringbuilder kullanılıyor diye biliyordum. Onu da düzelteyim bari. O topicte yanıtı veren eleman time complexity den bahsedip geçmiş ben daha çok soruya zel bir çzüm arıyorum. Benim çzümümde bütün koordinatlar tek dizide sırayla x1, y1, x2, y2 diye tutuluyor sonra birinciden başlayıp tarıyor diğerlerini içteki loop o taramayı yapıyor dıştaki diziyi ilerletiyor. doğal olarak O(n2) büyük inputta koşulları sağlamıyor.

Soruyu yazabilir misin hocam? Koddan bakıp çıkamadım işin içinden. Ayrıca soru hakkında hiçbir şey bilmeden yapacağım yorum da şu olur: neden int arr = new int ; ? Sen hiç kaval çaldın mı?

Bu arada sitedeki bir problem açığa çıktı. Kod içerisinde tag varsa kodu bozuyor. bknz. line:2

benzer bir problem var hocam burada http://stackoverflow.com/questions/34446707/why-is-my-program-exceeding-the-time-limit alltaki cevap muhtemelen senin de çzümündür.. ayrıca sitedeki rnekte stringbuilgder kullanılmış, sen de ekrana yazdırmak yerine dnen değeri string builder e at, işlem bitince yazdırırsın.. Diğer türlü sürekli ekrana yazdırmak doğru değil. Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.