-thứ 1 là input của em sai. ở đây là nhiều bộ test mà ko cho trước số test case. nó nhập vào đến khi kết thúc file thì thôi
-thứ 2 thuật toán của em cũng ko đúng vs bài này. độ phức tạp là n^2 nên sẽ TLE.
vậy tóm lại bài này sai vì input sai.
và nếu sửa lại đúng input thì sẽ dính LTE
Announcement
Collapse
No announcement yet.
Về bài K - ACM Miền Trung 10/10/2015
Collapse
X
-
Originally posted by 14520848 View PostThế thì đơn giản quá rồi :sweat: nãy giờ cứ nghĩ cao siêu laster: thành thật xin lỗi bạn
Leave a comment:
-
Originally posted by 14520820 View Postdãy này nhá 10 1 5 3 4 1 9; cho s = 12 nhá
cách bạn là sort phải k. vậy là : 10 9 5 4 3 1 1-> chiều dài 2 phải k
nhưng bạn chọn liên tiếp có dãy nào 2 số mà tổng nó >= 12 không ???:go:
Leave a comment:
-
Originally posted by 14520820 View Postdãy này nhá 10 1 5 3 4 1 9; cho s = 12 nhá
cách bạn là sort phải k. vậy là : 10 9 5 4 3 1 1-> chiều dài 2 phải k
nhưng bạn chọn liên tiếp có dãy nào 2 số mà tổng nó >= 12 không ???:go:
Leave a comment:
-
Originally posted by 14520848 View Post:stick::stick::stick::stick::stick:
Mình không hiểu ý bạn lắm, chọn 10 6 5 với chọn 5 10 6 thì đều xuất đáp án là 3 mà. Mà già sử bạn có muốn tìm đãy con liên tiếp đi nữa, chỉ việc lấy dãy tối ưu nhất ( đã tìm ra sau khi sort) rồi so với dãy ban đàu để rút ra thứ tự chính xác của dãy tối ưu.
(Vd 10 6 5 là dãy tối ưu, dãy ban đầu là 5 3 10 2 6. Thì so từng phần tử sẽ ra thứ tự dãy tối ưu thành 5 10 6, nhưng đó là không cần thiết vì đề không yêu cầu ta xuất ra dãy con tối ưu)
cách bạn là sort phải k. vậy là : 10 9 5 4 3 1 1-> chiều dài 2 phải k
nhưng bạn chọn liên tiếp có dãy nào 2 số mà tổng nó >= 12 không ???:go:
Leave a comment:
-
Originally posted by 14520820 View Postmình đã bảo là bạn xem kỹ lại đề đi rồi mà "a subsequence of a list is defined as a non-empty sequence of contiguos numbers from the list" :tire:
Mình không hiểu ý bạn lắm, chọn 10 6 5 với chọn 5 10 6 thì đều xuất đáp án là 3 mà. Mà già sử bạn có muốn tìm đãy con liên tiếp đi nữa, chỉ việc lấy dãy tối ưu nhất ( đã tìm ra sau khi sort) rồi so với dãy ban đàu để rút ra thứ tự chính xác của dãy tối ưu.
(Vd 10 6 5 là dãy tối ưu, dãy ban đầu là 5 3 10 2 6. Thì so từng phần tử sẽ ra thứ tự dãy tối ưu thành 5 10 6, nhưng đó là không cần thiết vì đề không yêu cầu ta xuất ra dãy con tối ưu)
Leave a comment:
-
Originally posted by 14520848 View PostNó có bắt chọn dãy con hay không thì đáp án xuất ra vẫn y như cách làm của mình n . Thế thì tạo sao lại phải đi chọn dãy con trong khi mình chỉ cần xuất đáp án là độ dài của dãyLast edited by 14520820; 11-10-2015, 09:39.
Leave a comment:
-
Originally posted by 14520820 View Postchắc bạn chưa đọc kỹ đề, "Bài này mình nghĩ bạn nên sort list từ to đến nhỏ. Sau đó...." :go:Originally posted by 15520878 View PostĐề:
[ATTACH=CONFIG]17845[/ATTACH]
Em chạy hết mọi ngóc ngách rồi, tuy code hơi bựa nhưng không thể nào sai được, vậy mà submit cứ bị Wrong Answer :surrender:
Ai giúp em tìm ra test hiểm và bug trong code em với ạ, em cảm ơn nhiều!
Ý tưởng: Chạy từ đầu đến cuối dãy, ở mỗi lượt chạy, tính tổng các dãy con tạo bởi phần từ đang xét và các phần tử theo sau nó, khi gặp
dãy con có tổng >= k thì thoát ra, trước khi thoát có ghi nhận độ dài để tìm min độ dài nhằm làm kết quả cuối cùng. Ở cuối hàm main là
một loạt if để bắt các test hiểm.
// biến trong bài: n <-> N, k <-> S, s là biến tạm để tính tổng mỗi dãy con, l là chiều dài tạm của mỗi dãy con, m là kết quả cần xuất.
Code em:
Code:#include <iostream> using namespace std; int main() { int n, k; cin >> n >> k; int a[100000]; for (int i = 0; i < n; i++) cin >> a[i]; a[n++] = 0; int m = n, s, l; for (int i = 0; i < n; i++) { s = a[i], l = 1; for (int j = i + 1; j < n; j++) { if (s >= k) { if (l < m) m = l; break; } s += a[j]; l++; } } if (m > n - 1 || n - 1 == 1 && a[0] < k) { cout << 0 << '\n'; return 0; } if (n - 1 == 1 && a[0] >= k) { cout << 1 << '\n'; return 0; } cout << m << '\n'; return 0; }
Leave a comment:
-
Originally posted by 15520878 View PostKhông đâu anh, thi ACM dạng đề này mình chỉ cần viết 1 trường hợp đơn lẻ, khi chấm nó sẽ tự chạy lại ở mỗi test, còn dạng nữa là nó cho sẵn số case khi đó mới như anh nói. Hồi trước em đã thử lặp vô hạn rồi nhét code vào nhưng bị TLA, sau khi sửa lại dạng chạy đơn thì mới submit thành công.
Leave a comment:
-
Code đã AC :funny:
PHP Code:#include <stdio.h>
#include <stdlib.h>
unsigned long long minSubArray(int s,int* a,unsigned long long n)
{
unsigned long long sum=a[0],head=0,tail=0,min=n+1;
while(tail<n)
{
if(tail-head+1<min && sum>=s) min=tail-head+1;
if(sum>=s) sum-=a[head++];
else sum+=a[++tail];
if(head>tail) tail=head;
}
return min==n+1?0:min;
}
int main()
{
unsigned long long n,s;
while(scanf("%llu%llu",&n,&s)==2)
{
int* a;
a=(int*)calloc(sizeof(int),n);
unsigned long long i;
for(i=0;i<n;i++) scanf("%d",&a[i]);
printf("%llu\n",minSubArray(s,a,n));
}
return 0;
}
Last edited by 13520803; 11-10-2015, 00:18.
Leave a comment:
-
Originally posted by 15520878 View PostKhông đâu anh, thi ACM dạng đề này mình chỉ cần viết 1 trường hợp đơn lẻ, khi chấm nó sẽ tự chạy lại ở mỗi test, còn dạng nữa là nó cho sẵn số case khi đó mới như anh nói. Hồi trước em đã thử lặp vô hạn rồi nhét code vào nhưng bị TLA, sau khi sửa lại dạng chạy đơn thì mới submit thành công.
Nói 1 cách đơn giản khi chạy bạn copy 4 dòng trong sample input vào console, nếu chương trình của bạn in ra 2 dòng như trong sample output thì mới đúng.
Leave a comment:
-
Originally posted by 14520848 View PostBài này mình nghĩ bạn nên sort list từ to đến nhỏ. Sau đó cộng từ từ tử đầu đến cuối đến khi to hơn thoát ra và trả về kết quả. Vì nếu dãy không sắp xếp mà cộng thì với các dãy có trăm ngàn thì chạy hết là không khả thi và có thể time out :v :v .
Mà thi xong có giáo viên hướng dẫn sao không hỏi trực tiếp luôn :beatbrick: . Lần trước mình tham gia và bị cái lỗi cấp phát bộ nhớ, code block chạy sai visual chạy đúng cũng đi hỏi :v :v
Leave a comment:
Leave a comment: