Untitled
unknown
c_cpp
4 years ago
1.2 kB
2
Indexable
#include <fstream> using namespace std; ifstream f("memory006.in"); ofstream g("memory006.out"); long long nr, sum, i, st, dr, p[60]; int middle; short a[10001], t; short index(int st, int dr) { if(st > dr) return 0; middle = (st + dr) / 2; if(nr == p[middle]) return middle; else if(nr < p[middle]) return index(st, middle - 1); else return index(middle + 1, dr); } int main() { p[1] = 2; for(i = 2; i <= 60; ++i) p[i] = p[i - 1] * 2; int n, k, cnt = 0; f >> n >> k; sum = 0, st = 0, dr = -1; for(i = 1; i <= n; ++i) { f >> nr; t = index(1, 60); if(t == 0) sum = 0, st = 0, dr = -1; else { dr = (dr + 1) % 10001; a[dr] = t; sum += t; if(sum == k) cnt++; else if(sum > k) { while(sum > k) { sum = sum - a[st]; st = (st + 1) % 10001; } if(sum == k) cnt++; } } } g << cnt; return 0; }
Editor is loading...