[Offer收割]编程练习赛21 register

Ended

Participants:295

Verdict:Accepted
Score:100 / 100
Submitted:2017-08-06 14:23:02

Lang:G++

Edit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <fstream>
#include <unordered_map>
#include <algorithm>
using namespace std;
typedef long long ll;
ll mod = 1000000007;
vector<ll> shiftSum;
int find(ll a, vector<ll>& A, int l, int r)
{
    if (a >= A[r]) return r;
    if (a < A[l]) return -1;
    if (l > r) return -1;
    if (l == r) return A[l] > a ? -1 : l;
    if (l == r - 1) return l;
    int cur = (l + r) / 2;
    if (A[cur] == a) return cur;
    else if (A[cur] < a) return find(a, A, cur, r);
    return find(a, A, l, cur - 1);
}
ll f(ll K, ll p, int cur, vector<ll>& A)
{
    ll m = K - p;
    int index = find(m, A, 0, cur);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX