Chắc là hiển thị con bot đang làm bài đó anh =))).
Mấy cái thi đấu này chỉ cần anh đạt điểm cao hơn bot là tính win rồi, thời gian ko quan trọng đâu =))
Rủ nhau học: Rủ mọi người vào codefights thi đấu dành danh dự cho Việt Nam
nhấp nháy ở problem nào nghĩa là problem đó đang được làm đó a
Cho mình hỏi Daynhauhoc có team trên Codefights chưa nhỉ ?
Vài nhận xét sau 1 thời gian chơi codefights:
Điểm thú vị:
- hệ thống fighting khá hay ho. Nó giúp mình thêm hứng thú đấu với lũ khác hơn.
- tournament có liên tục, nếu bạn thích là hầu như lúc nào cũng có
- company bot khá hay. Mình mới thử bot của Kik, đề hay (ko khó mấy) (và cực dài), hôm nào rỗi sẽ đấu với nó.
- challenge có 1 số khá thú vị. Dạo gần đây mình gặp 1 bài về nén dữ liệu, rất thích.
Điểm trừ:
- điểm trừ lớn nhất là không có (hay mình không tìm thấy?) hệ thống phân loại đề theo trình độ. Mình có chơi qua projecteuler và codewar thì hệ thống bài theo các cấp độ rất tốt; codefights thì mình không biết chọn đề như nào, nhiều khi gặp mấy bài siêu dễ, lắm lúc lại gặp bài quá khó.
- hệ thống arcade dở hơi :)) câu hỏi toàn mấy câu nhập môn mà không cho skip. Mình không đủ kiên nhẫn và thời gian để làm arcade (dù mình nghĩ khoảng sau bài 50 hoặc 100 sẽ hay)
Tạm vậy. Bây giờ mình vẫn hàng ngày vào chơi để luyện code hàng ngày, hehe
Arcade về sau có mấy câu bit manipulation, graph v…v làm phê chết bỏ ra =))).
Câu này chỉ cho viết 1 dòng code, chả biết làm thế lào, chắc có trick gì đó :v
Câu này ngồi vẽ hình tùm lum, tìm công thức mà chưa ra =))
câu hcn thì có thể chia hcn thành 2 cái tam giác, rồi đếm số lượng điểm nằm trong 2 tam giác đó là ra (xài Barycentric coordinate). Nhưng phải trừ những điểm nằm trên đường chéo chung, cũng hơi vật vã
câu bit kia thì có lẽ bước đầu là đảo bit cho bit 0 thành bit 1, rồi bước tiếp theo thì bó tay
ớ tìm ra được công thức rồi =))
int rectangleRotation(int a, int b)
{
a /= sqrt(2);
b /= sqrt(2);
int count = 0;
for (int x = -1000; x < 1000; ++x)
for (int y = -1000; y < 1000; ++y)
if (abs(x+y) <= a && abs(x-y) <= b) count++;
return count;
}
cái giới hạn trên dưới [-1000, 1000] ko biết đúng ko =))
![](http://daynhauhoc.s3-ap-southeast-1.amazonaws.com/original/3X/a/1/a17b87ea843a52e8ce44a35109bca772af4ba263.png)
do 4 cạnh xanh dương đều là tạo góc 45 độ nên 4 cạnh đó có công thức là
- f1(x,y) = x + y + u = 0
- f2(x,y) = x + y - u = 0
- f3(x,y) = x - y + v = 0
- f4(x,y) = x - y - v = 0
do điểm O(0,0) nằm trong hcn, nên ta có
- f1(0,0) = u > 0
- f2(0,0) = -u < 0
- f3(0,0) = v > 0
- f4(0,0) = -v < 0
vậy suy ra nếu 1 điểm P(x,y) nằm trong hcn thì phải thỏa 4 điều kiện
- f1(x,y) = x + y + u > 0
- f2(x,y) = x + y - u < 0
- f3(x,y) = x - y + v > 0
- f4(x,y) = x - y - v < 0
hay nói cách khác: |x + y| < u và |x - y| < v
bây giờ đi tìm u, v:
vẽ thêm 2 đường đỏ vuông góc với 2 cạnh hcn, ta được các tam giác vuông cân 45 độ, dễ thấy là u = a/căn(2), v = b/căn(2). Vậy u, v đều là số thập phân, nên công thức trên ta lấy <= phần nguyên của u,v là được.
phần còn lại là tìm bounding box của hcn cho nó tối ưu, nhưng thôi tạm cho nó là -1000 tới 1000 luôn đi =)
Bài bit
Ta có x & (x - 1) -> tắt cái bit 1 phải cùng
x & (-x) -> tắt hết bit còn lại trừ bit 1 phải cùng
như 1000100 -> 100
Nhưng mình tìm bit 0 -> đảo bit lại số cần tìm và tìm bit 1 như bth
int a = ~n;
a = a & (a - 1);
a = a & (-a);
printf("%d", a);
-> Gom lại thành ~n & (~n - 1) & -(~n & (~n - 1))
kinh dị vậy
nhưng 33 = 100001 nó ra 4, đáng lẽ phải ra 8 chứ tính từ trái qua mà. n = (100111111)2 thì cũng ra 8…
cách “tắt” bit đầu ghê vậy =)
Ra 4 chớ, ngta nói rightmost với tính từ 0 mà :~
ý đọc ko kỹ đề hèn gì