VM15 round 2 đã kết thúc suôn sẻ, và trong thời gian ngắn nhất chúng mình sẽ đưa ra kết quả chấm bộ test chính thức.

Topic này mình lập ra để các bạn cùng nhau vào trao đổi trước khi solution của ban tổ chức được đưa ra. Bàn luận là một cách tốt để có thể nâng cao trình độ bản thân và sửa những sai lầm của mình trong round này, rút kinh nghiệm cho các round khác.

Nhất là bài VMSHAPE là một bài rất thú vị để các bạn trao đổi thuật toán :D

Cảm ơn các bạn đã tham gia kỳ thi VM15.

Trả lời chipchip3412
  Hiện bài gốc

ChipChip đẹp trai ghê :))

Trả lời chipchip3412
  Hiện bài gốc

Không thể buồn hơn :'( mình ngồi cả tiếng khảo sát xem cái 0.5 là cái gì...

Trả lời chemthan
  Hiện bài gốc

Nếu vậy thì tính f(n) là mất xấp xỉ O(n căn n) nhỉ @.@ Có cách nào tối ưu xuống O(n) không nhỉ @.@

Trả lời sorry_natsukagami
  Hiện bài gốc

nlogn mà bạn.

Trả lời chemthan
  Hiện bài gốc

Wow @.@ nlogn mà vẫn chưa đủ thì thốn thật @.@

Thuật toán bài VMSUM2 của mình, không dùng cái nhận xét ảo diệu như của anh chipchip3412 mà chỉ là QHĐ.

Đầu tiên tính trước H(i) = tổng các 1/x với 1 <= x <= i

Ta có:

R(i) = R(i - 1) + [G(i) - F(i)] - S(i).

G(i) = tổng các 1/(i * x) với x < i.

F(i) = tổng các 1/(i*x) với (x < i) và có ước chung khác 1 với i.

S(i) = tổng các 1/(x*y) mà x+y = i-1 đồng thời x, y nguyên tố cùng nhau.

Cách tính

G(i) = H(i - 1) / i;

Tính F(i) ta có thể for hết các ước của i và dùng dãy H để tính.

Tính S(i) ta cũng for ước và dùng các giá trị S() trước đó để tính (QHĐ).

Tổng số ước của các số nguyên dương không quá n tỉ lệ với NlogN nên ĐPT của cả thuật toán là O(NlogN), tuy nhiên thuật này có hằng số độ phức tạp rất lớn nên nếu không may mắn thì sẽ không pass hết test :D

 

Trả lời iamquang95
  Hiện bài gốc

Anh ơi. Chấm xong rồi thì đã có bảng xếp hạng chưa ạ? Em thấy lần này chấm khá suôn sẻ mà sao lâu vậy?

Trả lời chipchip3412
  Hiện bài gốc

Xin phép chứng minh cái vụ 1/2 nhé =)) mình đã hỏi được 1 red coder của codeforces 

Giả sử ta coi F(n) = tổng tất cả các 1 / pq với p q nguyên tố cùng nhau, p < q <= m và p + q > m

Mình có F(2) = 1/(1 * 2) = 1/2 nhé

Ta giả sử F(n) = 1/2, ta sẽ chứng minh F(n+1) = 1/2

Để ý F(n+1) = F(n) + 1/(n+1) * G(n+1) - K(n+1)

với G(n+1) = tổng các phân số 1/p sao cho gcd(n+1, p) = 1

và K(n+1) = tổng các 1/pq sao cho gcd(p, q) = 1; p < q <=n và p + q = n + 1

Do gcd(p, q) = 1 nên gcd(n + 1, p) = gcd(n+1, q) = gcd(p, q) = 1. (tính chất đồng dư thôi)

Như vậy nếu tồn tại  - 1/pq trong K(n+1) thì:

-1/pq = 1/(p+q) * (1/p + 1/q) = 1/(n+1) * (1/p + 1/q) tồn tại trong G(n+1)

Vì thế nên F(n) = F(n+1) = 1/2

 

Trả lời natsukagami
  Hiện bài gốc

1 bài tập rất ảo diệu :3

Cho mình hỏi : max(M,N) ở bài swap nghĩa là sao ?

Trả lời deleted_user_1
  Hiện bài gốc
int max(int m, int n) {
    if (m > n) return m;
    else return n;
}

 

Do bài viết này nhiều lứa tuổi đọc nên em / mình / anh sẽ thống nhất xưng là mình.

Về thuật giải, mình chỉ nói sơ qua thuật VMSHAPE do các bài khác bạn "chipchip3412" đã trình bày rôi.

Thuật toán có 2 phần:

1. Chuyển màu về 0/1.

2. Xác định hình(gần đúng) mà các số bit 1 biểu diễn.

1) Trong tất cả các code, mình luôn tìm màu X sao cho chia thành 2 loại <= X và > X sao cho thỏa mãn điểu kiện nào đó. Trong khi thi mình lấy tổng trung bình min nhưng sau khi thi + gen test + check thì mình thấy để đơn giản là trung bình cộng lại tốt hơn hẳn cách phức tạp trên.

2) Ban đầu cách làm của mình cũng giống hệt "chipchip3412" là so tỉ lệ diện tích và lời giải này cũng được 42.5 điểm. Sau đó mình thấy độ nhiểu ảnh hưởng quá nhiều nên mình duyệt 20 bán kính lớn nhất,tạo các đường viền vuông và tròn. Đường viền nào có tỉ lệ diện tích phủ cao nhất thì mình in ra. Nếu độ phủ <= 0.8 (lấy ước lượng) thì coi là hình tam giác. Lời giải này giúp mình ăn thêm 1 test trong lúc thi lên 45 điểm.

Sau khi thi mình đổi cách đặt màu thì lên 60 điểm (sửa có 1 dòng code - :sosad:).

Một số ý tưởng khác, đã cài nhưng không hiệu quả:

+ Quay các góc 1-90 độ cho hình vuông, vì hình vuông ở góc 45 độ trông rất giống hình tròn do tính chất của các tọa độ nguyên.

+ Vẽ đường viền, giữ các đường viền có chênh lệch 1/0 lớn nhất.

Tuy nhiên cả 2 sol này đều không hiệu quả vì độ nhiễu ảnh hưởng quá lớn tới hình mình tạo ra.

Cách tiếp cận của mình chỉ là xử lý các bit 0/1 và tọa độ nguyên nên độ chính xác không cao. Không biết có ai thạo về phần hình ảnh và nhận diện (recognition) có thể chia sẻ cách xử lý những bài dạng như thế này?

 

Mình có một số ý kiến về kỳ thi như sau

Bài VMSUM2, chỉ cần tìm đúng từ khóa sẽ ra Project Euler, ai từng làm ở đây sẽ biết cái vào xem thread và sẽ ra rất nhiều công thức, chọn một số công thức đủ tốt là có thể ăn bài này mà không mất công sức suy nghĩ. Mình thấy bài này ra là khá bất công khi người search được thì ăn dễ dàng, còn không thì phải tự lực cánh sinh thì cũng khá vất vả.

Bài VMSHAPE: Đây là một bài NP. Theo như mình thấy các bài NP thường sẽ được cho qua ít nhất 1 ngày đêm ( các kì VM trước thường để bài NP là 1,5 ngày ). Nhưng theo cách thi mới thì thời gian dành riêng cho bài NP thật sự là quá ít. Bài này mình định tạo generator + 100 local tests để đánh giá độ tốt của từng cách làm nhưng việc này mình chỉ có thể thực hiện được sau khi thi xong vì không đủ thời gian. Mong các admins có thể kéo dài thời gian nộp bài NP hơn so với các bài khác.

Trả lời theguiler
  Hiện bài gốc

Nói thêm về bài VMSHAPE: đây là bài anh đã chuẩn bị cho đội IOI năm nay luyện tập trước khi đi Kazakhstan. Bộ test dùng cho cuộc thi tuần này đã được giảm nhiễu và gộp nhiều test trong 1 file.

Bài này có khoảng hơn 300 test lẻ: các bạn ở đội IOI đạt được kết quả tương đối tốt, khoảng gần 85% với test lẻ, không rõ là khi giảm nhiễu + gộp test vào thì sẽ được bao nhiêu điểm :)  

Kiên và Dũng có cách tiếp cận và xử lý rất thông minh, mong 2 bạn vào chia sẻ cách làm của các em với các bạn khác.

ad ơi sao bài VMRESTO của em chấm ở VM15 tới h vẫn được AC

Vậy mà khi nộp lên spoj thì lại báo 0đ là tại sao z ak 

Trả lời luadanhvong
  Hiện bài gốc

Trên VM15 chấm test ví dụ thôi mà a @@

Trả lời ndkhaivn
  Hiện bài gốc

chấm chung cuộc rồi ak vẫn bị z 

mak thôi du s cx AC hết ùi