Điểm:
2000 (p)
Thời gian:
1.0s
Bộ nhớ:
512M
Input:
bàn phím
Output:
màn hình
Cho một xâu nhị phân có độ dài \(n\). Với mỗi \(k\) trong khoảng \(1 \ldots n - 1\) đếm số cách chọn \(i\) và \(j\) sao cho \(i - j = k\) và cả hai vị trí đều chứa bit \(1\).
Input
- Một dòng duy nhất chứa một xâu chỉ bao gồm kí tự \(0\) và \(1\).
Output
- Với mỗi \(k\) trong khoảng \(1 \ldots n - 1\), in ra số cách có thể chọn được hai vị trí như vậy.
Constraints
- \(2 \ \leq \ n \ \leq \ 2 \times 10^5\)
Example
Sample input
1001011010
Sample output
1 2 3 0 2 1 0 1 0
Bình luận
include <bits/stdc++.h>
using namespace std;
namespace fft {
typedef double dbl;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
string s;
cin >> s;
string t = s;
reverse(t.begin(), t.end());
vector<int> a, b;
for(auto e : s) {
a.push_back(e - '0');
}
for(auto e : t) {
b.push_back(e - '0');
}
auto c = fft::multiply(a, b);
int n = a.size();
for(int i = (int)c.size() - n + 1; i < (int)c.size(); i++) {
cout << c[i] << " ";
}
cout << "\n";
return 0;
}
2 bình luận nữa