今日头条编程题(手串、用户喜好)代码分享
1、手串
//手串,代码写的有点丑,还用了goto。。。基本思想就是每次将所有颜色++,当i>m的时候,将(i-m)时候的颜色--,依次判断颜色是否重复。复杂度O(n)。 ----- 100%
#include<bits/stdc++.h> using namespace std; int f[60]; set<int > s; int have[20005][60]; int pos[20005]; int main() { int n,m,c; scanf("%d%d%d",&n,&m,&c); for(int i=1; i<=n+n; i++) { if(i>n) { goto loop; } int k; scanf("%d",&k); pos[i]=k; pos[i+n]=k; for(int j=0; j<k; j++) { scanf("%d",&have[i][j]); int a=have[i][j]; have[i+n][j]=a; } loop : for(int j=0;j<pos[i];j++) { int a=have[i][j]; f[a]++; } if(i>m) { int p=i-m; int len=pos[p]; for(int j=0; j<len; j++) { int a=have[p][j]; f[a]--; } } if(i>=m) { for(int j=1; j<=c; j++) { if(f[j]>=2) { s.insert(j); } } } } printf("%d\n",s.size()); return 0; } /* 5 2 3 3 1 2 3 0 2 2 3 1 2 1 3 */
2、用户喜好
//用户喜好,要先对k值进行离散化,因为k值(即用户喜好值)有可能特别大,比如1e9。然后用一个vector存储k出现的位置,排序(排不排都一样,放进去的时候肯定是顺序的),然后两次二分求出区间就ok了~(先还搞了个线段树,太失败...) ------100%
//Óû§Ï²ºÃ #include <cstdio> #include <algorithm> #include <iostream> #include <cstring> #include <map> using namespace std; const int maxn = 300007; vector<int > v[maxn]; map<int ,int > ma; int work1(int p ,int L) { int l=0,r=v[p].size()-1; int ans=1e9; while(l<=r) { int mid=(l+r)/2; if(v[p][mid]>=L) { ans=min(ans,mid); r=mid-1; } else { l=mid+1; } } if(ans==1e9) return -1; return ans; } int work2(int p ,int R) { int l=0,r=v[p].size()-1; int ans=-1; while(l<=r) { int mid=(l+r)/2; if(v[p][mid]<=R) { ans=max(ans,mid); l=mid+1; } else { r=mid-1; } } return ans; } int main() { int n; scanf("%d",&n); int num=1; for(int i=1;i<=n;i++) { int a; scanf("%d",&a); if(ma[a]==0) { ma[a]=num++; } v[ma[a]].push_back(i); } for(int i=1;i<=n;i++) { sort(v[i].begin(),v[i].end()); } int m; scanf("%d",&m); for(int i=0;i<m;i++) { int l,r,p,P; scanf("%d%d%d",&l,&r,&P); p=ma[P]; int L=work1(p,l); int R=work2(p,r); if(L==-1||R==-1) { printf("0\n"); } else { printf("%d\n",R-L+1); } } return 0; } /* 5 1 2 3 3 5 3 1 2 1 2 4 5 3 5 3 */
然后打个广告撒~~
广州多益网络的内推开始了,内推后简历免筛选,笔试直通二笔,应聘失败也不影响正式秋招,多一次机会。
内推码: N3dut1
岗位在这里http://xz.duoyi.com/home/news/2018-recommend.html
直接网申,填上内推口令N3dut1
是9.16笔试,爱你萌~~~
hahahaha