#CCBCHBAHAI0000103. Bẫy sizeof khi array đi vào hàm

Bẫy sizeof khi array đi vào hàm

Bẫy sizeof khi array đi vào hàm

Nguồn: Phước Hưng OJ

Phiên bản: Phước Hưng OJ Extended

Đề bài

Xét một chương trình C có một array object thật sự được khai báo tại nơi gọi:

int a[N];

Trong bài này, NN là một hằng số nguyên dương của chương trình mô phỏng. Ta quan tâm đến biểu thức

sizeof(a) / sizeof(a[0])

ở hai ngữ cảnh:

  • ngữ cảnh 0: biểu thức được đánh giá ngay trong block nơi a vẫn là array object; khi đó số phần tử suy ra được chính xác là NN;
  • ngữ cảnh 1: biểu thức được đặt trong hàm có parameter int a[]; trong parameter list, kiểu này được điều chỉnh thành int *, nên sizeof(a) là kích thước pointer, không phải kích thước toàn mảng. Vì vậy biểu thức không thể dùng một cách portable để suy ra số phần tử của mảng gốc.

Với mỗi truy vấn ngữ cảnh, hãy cho biết kết quả suy được về độ dài mảng.

Input

Dòng đầu chứa N,QN,Q. Dòng thứ hai chứa QQ số nguyên c1,…,cQc_1,\ldots,c_Q, mỗi ci∈{0,1}c_i\in\{0,1\}.

Output

Với mỗi truy vấn: nếu ci=0c_i=0, in NN; nếu ci=1c_i=1, in UNKNOWN. Mỗi kết quả trên một dòng.

Subtask

Subtask 1 (20 điểm): 1≤N,Q≤101\le N,Q\le10.

Subtask 2 (30 điểm): 1≤N≤10001\le N\le1000, 1≤Q≤1001\le Q\le100.

Subtask 3 (50 điểm): 1≤N≤1061\le N\le10^6, 1≤Q≤10001\le Q\le1000.

Ví dụ

Input

8 4
0 1 0 1

Output

8
UNKNOWN
8
UNKNOWN

Giải thích

Ở nơi khai báo, a còn là array object 8 phần tử. Trong parameter int a[], nó đã được điều chỉnh thành pointer nên không thể suy độ dài gốc bằng sizeof.