1. 程式人生 > >今日頭條筆試

今日頭條筆試

1#include<iostream>
#include<vector>
using namespace std;
int main(){
    int n, m, c;
    n = m = c = 0;
    cin >> n >> m >> c;
    vector< vector<int> > color(c + 1);
    for (int i = 0; i<c + 1; i++){
        color[i].resize(n, 0);
    }
    int col = 0;
    int
tmp = 0; for (int j = 0; j<n; j++){ cin >> col; for (int z = 0; z<col; z++){ cin >> tmp; color[tmp][j] = 1; } } int sum = 0; for (int i = 1; i<c + 1; i++){ int sumflag = 0; for (int j = 0; j<n; j++){ for
(int z = 0; z<m; z++){ sumflag += color[i][(j + z) % n]; } } if (sumflag/m>1) sum++; } cout << sum; return 0; } 第二種: #include <iostream> #include <algorithm> #include <math.h> #include <stack> #include <string>
#include <set> using namespace std; int main(){ int n,m,c; cin>>n>>m>>c; int col[51][10000]; for(int i = 0;i<n;i++){ //初始化陣列; for(int j = 0;j<51;j++){ col[j][i] = 0; } int num;//每個位置珠子顏色個數 cin>>num; for(int j = 0;j<num;j++){ int color;//珠子顏色 cin>>color; col[color][i] = 1; } } //看位置i的col相隔最小 int count = 0;//顏色不符合個數 for(int i = 1; i<51; i++){ int begin = 0; int mm = n;//相差最小距離 int p = 0; bool flag = 0; for(int j = 0; j<n; j++){ if(col[i][j] == 1){ if(flag == 0){ flag = 1; begin = j;//第一個位置 p = j; } else{ mm = min(mm, j-p); p = j; } } } mm = min(mm, n+begin-p); if(mm<m){ count++; } } cout<<count; return 0; }

2、

#include<cstdio>
#include<map>
#include<algorithm>
using namespace std;
const int N = 300003;
struct P{
    int l, r, k, id;

}p[N];

int f[N];
int ans[N];
map<int, int>mp;

bool cmp(P x, P y){
    return x.l < y.l;
}
int main(){
    int n, Q;
    scanf("%d", &n);
    for(int i = 1; i <= n; i++){
        scanf("%d" ,&f[i]);
    }
    scanf("%d", &Q);
    for(int i = 1; i <= Q; i++){
        scanf("%d%d%d",&p[i].l, &p[i].r, &p[i].k);
        p[i].id = i;
    }
    p[0].r = 0;
    sort(p + 1, p + Q + 1, cmp);
    int nowL = 0, nowR = 0;
    for(int i = 1; i <= Q; i++){

        int l = p[i].l;
        int r = p[i].r;
        if(l >= p[i-1].r){
            mp.clear();
            for(int j = p[i].l; j <= p[i].r; j++){
                mp[f[j]] ++;
            }
            nowL = p[i].l; nowR = p[i].r;
        }else{
            while(nowL < l){
                mp[f[nowL]] --;
                nowL ++;
            }
            while(nowR < r){
                nowR ++;
                mp[f[nowR]] ++;
            }
        }
        ans[p[i].id] = mp[p[i].k];
    }
    for(int i = 1; i <= Q; i++){
        printf("%d\n", ans[i]);
    }
    return 0;
}
/*
5
1 2 3 3 5
3
1 2 1
2 4 5
3 5 3
*/