美团春招第一场3/14笔试测开题解

(码风很屎别在意~)#一起聊美团#
1.很简单直接都是一个数字就行
#include <bits/stdc++.h>

using namespace std;

#define endl '\n';
void solve() {
    int n; 
    cin >> n;
    vector<int> v(n + 1);
    for(int i = 1; i <= n; i++) {
        cin >> v[i];
        cout << (n + 1) - v[i] << " \n"[i == n];
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);

    int t;
    cin >> t;
    while(t--) {
        solve();
    }  
}

2.只用算平方就行了,直接暴力。如下

#include <bits/stdc++.h>

using namespace std;

#define endl '\n';

bool cal(int x) {
    int tot = 0;
    for(int i = 1; i * i <= x; i++) {
        if(x / i * i == x)tot += 2;
    }
    if(tot % 2)return false;
    else return true;
}

void solve() {
    int l, r;
    cin >> l >> r;
    int lmin = sqrt(l);
    int ans = 0;
    lmin = lmin * lmin == l ? lmin : lmin + 1;
    if(lmin == 1)ans++, lmin++;
    for(int i = lmin; i * i <= r; i++) {
        if(cal(i * i))ans++;
    }
    cout << ans;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);

    int t;
    t = 1;
    while(t--) {
        solve();
    }  
}
3.稍微推一下公式就行,题解如下
#include <bits/stdc++.h>

using namespace std;

#define endl '\n';
#define int long long
int mod = 1e9 + 7;

const int N = 1e6 + 10;
int a[N];

void solve() {
    int k, q;
    cin >> k >> q;
    for(int i = 1; i <= k; i++) {
        a[i] = 1;
    }
    a[k + 1] = k ;
    int tot = k;
    for(int i = k + 2; i <= 1000000; i++) {
        tot = ((tot + a[i - 1])  - a[i - k - 1]);
        a[i] = tot % mod; 
    }

    while(q--) {
        int x;
        cin >> x;
        cout << a[x] % mod << endl;
    }
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);

    int t;
    t = 1;
    while(t--) {
        solve();
    }  
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务