牛客OI周赛8-普及组

https://ac.nowcoder.com/acm/contest/543#question

 

A.

代码:

#include <bits/stdc++.h>
using namespace std;

int N;
vector<int> v;

int main() {
    scanf("%d", &N);
    v.resize(N);
    for(int i = 0; i < N; i ++)
        scanf("%d", &v[i]);

    int ans;
    sort(v.rbegin(), v.rend());
    for(int i = 0; i < N; i ++) {
        int a = (int)sqrt(v[i]);
        if(a * a != v[i]) {
            ans = v[i];
            break;
        }
    }

    printf("%d\n", ans);
    return 0;
}
View Code

B.

代码:

#include <bits/stdc++.h>
using namespace std;
 
int N, M;
vector<string> s;
vector<string> t;
 
int main() {
    scanf("%d%d", &N, &M);
    s.resize(N);
    t.resize(M);
    for(int i = 0; i < N; i ++)
        cin >> s[i];
    for(int i = 0; i < M; i ++)
        cin >> t[i];
 
    for(int i = 0; i < N; i ++) {
        int ls = s[i].length();
        int cnt = 0;
        for(int j = 0; j < M; j ++) {
            int lt = t[j].size();
 
            int p1 = 0, p2 = 0, cc = 0;
            while(p1 < ls && p2 < lt) {
                while(s[i][p1] != t[j][p2] && p1 < ls && p2 < lt) p1 ++;
                if(s[i][p1] == t[j][p2]) cc ++, p1 ++, p2 ++;
            }
            if(cc == lt) cnt ++;
        }
        printf("%d\n", cnt);
    }
    return 0;
}
View Code

 

C.

代码:

#include <bits/stdc++.h>
using namespace std;

int T;
long long L, R;

int main() {
    scanf("%d", &T);
    while(T --) {
        scanf("%lld%lld", &L, &R);
        int pos = -1;
        for(int i = 63; i >=0; i --) {
            if((1LL << i & L) != (1LL << i & R)) {
                pos = i;
                break;
            }
        }
        long long ans = 0;
        for(int i = 0; i <= pos; i ++)
            ans += 1LL << i;

        printf("%lld\n", ans);
    }
    return 0;
}
View Code

从高到低找到第一个 L R 不同的位

C.D 比赛的时候忘记被什么中断掉了 待更!(我会记得写的 QAQ)最近很长一段时间都没记得更了 写了题目也没来得及贴上 我我我争取以后不要这样了!前一阵写的题目找个时间都贴出来吧!

posted @ 2019-03-24 20:57  丧心病狂工科女  阅读(139)  评论(0编辑  收藏  举报