1. 程式人生 > >牛客OI周賽7-普及組

牛客OI周賽7-普及組

企鵝 closed != none san -s hide string pre

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

A.救救貓咪

技術分享圖片
#include <bits/stdc++.h>
using namespace std;
 
const int maxn = 1e5 + 10;
int N;
 
struct Node {
    int x;
    int y;
    int cnt;
}node[maxn];
 
int main() {
    scanf("%d", &N);
    for(int i = 0; i < N; i ++)
        scanf("%d%d", &node[i].x, &node[i].y);
 
    
for(int i = 0; i < N; i ++) { for(int j = 0; j < N; j ++) { if(node[j].x > node[i].x && node[j].y > node[i].y) node[i].cnt ++; } } for(int i = 0; i < N; i ++) printf("%d\n", node[i].cnt); return 0; }
View Code

B.救救兔子

技術分享圖片
#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e5 + 10;
int N, M;
int num[maxn];

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

    sort(num, num + N);
    scanf("%d", &M);
    while(M --) {
        int x;
        scanf(
"%d", &x); int l = 0, r = N - 1, mid; while(l <= r) { mid = (l + r) / 2; if(x > num[mid]) l = mid + 1; else if(x == num[mid]) break; else r = mid - 1; } if(num[mid] == x) printf("%d\n", num[mid]); else if(num[mid] > x) { if(mid == 0) printf("%d\n", num[mid]); else if((num[mid] - x) >= (x - num[mid - 1])) printf("%d\n", num[mid - 1]); else printf("%d\n", num[mid]); } else { if(mid == N - 1) printf("%d\n", num[mid]); else if((num[mid + 1] - x) >= (x - num[mid])) printf("%d\n", num[mid]); else printf("%d\n", num[mid + 1]); } } return 0; }
View Code

C.救救企鵝

技術分享圖片
#include <bits/stdc++.h>
using namespace std;
 
string s, a, b;
 
int main() {
    cin >> s >> a >> b;
    int sign;
    sign = s.find(a, 0);
    while(sign != string::npos) {
        s.replace(sign, a.size(), b);
        sign = s.find(a, sign + 1);
    }
    cout << s;
    return 0;
}
View Code

D.數糖紙

技術分享圖片
#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e6 + 10;
int N;
int num[maxn];
map<int, int> mp;

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

    set<int> s;
    int L = 0, R = 0, ans = 0;
    while(R < N) {
        while(R < N && !s.count(num[R])) {
            s.insert(num[R]);
            //mp[num[R]] ++;
            R ++;
        }
        ans = max(ans, R - L);
        s.erase(num[L]);
        //mp[num[L]] = 0;
        L ++;
    }
    printf("%d\n", ans);
    return 0;
}
View Code

D 題用 map 會超時

FH

牛客OI周賽7-普及組