Pertimbangkan tiga set A
, B
dan C
masing-masing berisi n
bilangan bulat. Dari sini kita bisa membuat set
S_n = {a * b + c | a in A, b in B, c in C}.
Diberikan n
, ada satu atau lebih ukuran minimal S_n
yang bergantung pada set yang A,B and C
telah dipilih.
Set dapat berisi n
bilangan bulat yang berbeda (positif, nol atau negatif). Misalnya, mereka tidak perlu menjadi bilangan bulat berturut-turut atau set sama dengan satu sama lain. A = {-1, 0, 5, 10, 27}, B = {2, 5, 6, 10, 14} and C = {-23, 2, 100, 1000,10000}
dapat diterima (meskipun bukan ide yang baik) misalnya.
Tugas
Tugas ini adalah untuk menulis kode untuk menemukan set terkecil S_n
bisa untuk masing-masing n
dari 1
ke 20
.
Untuk setiap n
dari 1
ke 20
kode Anda harus output dipilih A
, B
dan C
bersama dengan ukuran yang dihasilkan dariS_n
Skor
Skor Anda akan menjadi jumlah dari ukuran yang S_n
Anda buat. Itu akan menjadi jumlah dua puluh angka.
Semakin rendah skor semakin baik.
Contohnya
Jika A = B = C = {1, 2, 3, 4}
kemudian S_4 = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
yang berukuran 19
.
Namun ini sama sekali tidak optimal. Misalnya, A = B = C = {-1, 0, 1, 2}
berikan S_4 = {0, 1, 2, 3, 4, 5, 6, -1, -3, -2}
ukuran mana 10
.
Pengaturan waktu
Karena saya perlu menjalankan kode Anda untuk memverifikasi output, harap pastikan tidak memakan waktu lebih dari 30 menit dan 4GB RAM untuk berjalan di desktop normal.
Catatan
Kode Anda sebenarnya harus menghitung output. Anda tidak diperbolehkan melakukan hardcode atas jawaban yang dikomputasi ke dalam kode Anda.
sumber
Jawaban:
Rust, skor
14121411src/main.rs
Cargo.toml
Kompilasi dan jalankan bersama
cargo run --release
.Keluaran
Di laptop saya, ini digunakan sekitar 8 menit dan sekitar 1,5 GiB memori.
Bagaimana itu bekerja
Kami berasumsi (tanpa justifikasi khusus) bahwa A dan B adalah kisaran jelas dari bilangan bulat berurutan yang berpusat pada 0 atau ½, kemudian lakukan pencarian A * untuk C optimal diberikan A dan B .
sumber
B
danC
dapatkah Anda melakukan pencarian A * yang samaA
? Saya sedang memikirkan semacam pendekatan penurunan koordinat. Perbaiki semua kecuali satu set, optimalkan yang terakhir dan ulangi.A = B
dan kedua bilangan bulat berturut-turut benar-benar selalu optimal. Hanya satu contoh balasan akan menyenangkan.Aksioma, skor 1466
Set akan menjadi A = B = [- n / 2..n / 2] jika n% 2 == 0 lainnya A = B = [- n / 2 .. ((n / 2) +1)]
Himpunan C adalah jumlah array sebagai [-2, -1, .. (n-2)] untuk satu array array [] dari jenis ini [0,0,0,0,0] atau [0,1 , 1,1,2] atau [0,0,0,0,3] sehingga array memiliki properti
Jika Anda ingin lebih tepatnya atau PC Anda lebih cepat, Anda dapat mencoba meningkatkan '3' dalam 'inc (aix, 3)' yang meningkatkan jumlah array untuk variasi set C dan sehingga akan meningkatkan presisi hasil.
Dalam hasil string yang dicetak
di mana B = A dan | S | adalah jumlah elemen S
sumber
SQL Server, 1495
Solusinya dapat diverifikasi sini .
Maafkan saya untuk output dalam bentuk tabel.
sumber
C, skor
14481431Ini akan menjadi sama +/- algo dari implementasi Aksioma
hasil
sumber
Python 2 , skor 1495
Cobalah online!
Baseline sederhana untuk setiap set adalah interval panjang-n yang berpusat di sekitar 0, sedikit tidak seimbang untuk genap n. TIO memiliki kode Python untuk menghitung skor Anda.
Ukurannya
(n*n+1)/2
untuk n aneh dan(n*n+n)/2
bahkan n.sumber
Mathematica, skor 1495
sumber
C ++, skor 1411
Mengira A dan B adalah bilangan bulat berturut-turut yang berpusat di dekat 0, cukup gunakan anil simulasi untuk menemukan C.
Sumber:
Hasil:
Dengan -O2 di komputer saya, dibutuhkan 50 detik untuk menghitung semua hasil.
sumber