QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#772525#9225. Fibonacci FusionRaresFelixWA 45ms71180kbC++231.9kb2024-11-22 20:04:172024-11-22 20:04:17

Judging History

你现在查看的是最新测评结果

  • [2024-11-22 20:04:17]
  • 评测
  • 测评结果:WA
  • 用时:45ms
  • 内存:71180kb
  • [2024-11-22 20:04:17]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

using ll = long long;
using pl = pair<ll, ll>;

const ll MOD1 = 1e9 + 7;
const ll MOD2 = 1e9 + 9;
const double INF = 1e9;

struct nr {
    double l;
    ll r1, r2;

    nr(int v = 0) {
        r1 = v % MOD1;
        r2 = v % MOD2;
        if(!v) {
            l = -INF;
            return;
        }
        l = log10(double(v));
    }

    nr(string s) {
        r1 = r2 = 0;
        l = 0;
        double val = 0;
        double factor = 1.;
        for(auto it : s) {
            val += (it - '0') * factor;
            r1 = (r1 * 10 + it - '0') % MOD1;
            r2 = (r2 * 10 + it - '0') % MOD2;
            factor /= 10;
        }
        l = log10(val) + (double)s.size() - 1;
    }

    friend istream &operator>>(istream &i, nr &that) {
        string s;
        i >> s;
        that = nr(s);
        return i;
    }
};

pl add(pl a, pl b) {
    return pl({(a.first + b.first) % MOD1, (a.second + b.second) % MOD2});
}

pl sub(pl a, pl b) {
    return pl({(a.first - b.first + MOD1) % MOD1, (a.second - b.second + MOD2) % MOD2});
}


int main() {
    cin.tie(0);
    ios_base::sync_with_stdio(0);
    int n;
    cin >> n;
    vector<nr> V(n);
    for(int i = 0; i < n; ++i) cin >> V[i];
    sort(V.begin(), V.end(), [&](auto a, auto b) { return a.l < b.l; });
    pl a(0, 0), b(1, 1), c;

    const int NFIBO = 4e6;

    vector<pl> RestF;

    for(int i = 0; i < NFIBO; ++i) {
        RestF.push_back(a);
        c = add(a, b);
        a = b;
        b = c;
    }

    map<pl, int> M;
    ll re = 0;
    for(int i = 0; i < n; ++i) {
        int bound = int(V[i].l * 4.784971966781666);
        pl v = pl(V[i].r1, V[i].r2);
        for(int j = bound; j < bound + 4; ++j) {
            auto c = sub(RestF[j], v);
            re += M[c];
        }
        ++M[v];
    }

    cout << re << "\n";
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 17ms
memory: 70912kb

input:

6
50
8
8
5
72
354224848179261915070

output:

4

result:

ok 1 number(s): "4"

Test #2:

score: 0
Accepted
time: 45ms
memory: 70704kb

input:

28
200878223506436882933619847964496455022155117513398820563747455993172799881403389571477889821109288771413214004090719097929400406252135763028179112130390003528046316900603668569910008417315162907579003880220844686222148696041857432602133894827753998572080650383305777912447151917272483538029469449...

output:

27

result:

ok 1 number(s): "27"

Test #3:

score: -100
Wrong Answer
time: 44ms
memory: 71180kb

input:

5187
2640352926124261912741724778991366987330659389621881876017670644497364093930668042530271338851702874394631009332660937266680740235862107353443518003194307853104942996827176097428402408674756368623972812842571069642405111849826172879369776309763468485788964245903781380419155348915131587410703749...

output:

6051

result:

wrong answer 1st numbers differ - expected: '6073', found: '6051'