网易2019实习生Java编程题
生活随笔
收集整理的這篇文章主要介紹了
网易2019实习生Java编程题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題1:平面內(nèi)有n個矩形, 第i個矩形的左下角坐標為(x1[i], y1[i]), 右上角坐標為(x2[i], y2[i])。
如果兩個或者多個矩形有公共區(qū)域則認為它們是相互重疊的(不考慮邊界和角落)。
請你計算出平面內(nèi)重疊矩形數(shù)量最多的地方,有多少個矩形相互重疊。
思路:把坐標離散化之后直接統(tǒng)計(當時通過率90%)
#include<stdio.h> #include<algorithm> #include<map> using namespace std;int main(){const int N=500;int x1[N],y1[N],x2[N],y2[N],s[N],f[N][N];map<int,int> mp;mp.clear();for (int i=0; i<N; i++)for (int j=0; j<N; j++) f[i][j]=0;int n;scanf("%d",&n);for (int i=0; i<n; i++)scanf("%d",&x1[i]),s[i]=x1[i];for (int i=0; i<n; i++)scanf("%d",&y1[i]),s[n+i]=y1[i];for (int i=0; i<n; i++)scanf("%d",&x2[i]),s[2*n+i]=x2[i];for (int i=0; i<n; i++)scanf("%d",&y2[i]),s[3*n+i]=y2[i];int c=0;sort(s,s+4*n);for (int i=0; i<4*n; i++){if (mp.count(s[i])==0){mp[s[i]]=c++;}}for (int i=0; i<n; i++){if (x1[i]>x2[i]) swap(x1[i],x2[i]);if (y1[i]>y2[i]) swap(y1[i],y2[i]);for (int a=mp[x1[i]]; a<=mp[x2[i]]; a++)for (int b=mp[y1[i]]; b<=mp[y2[i]]; b++) f[a][b]++;}int ans=0;for (int i=0; i<c; i++)for (int j=0; j<c; j++){ans=max(ans,f[i][j]);}printf("%d\n",ans);return 0; }題2:牛牛以前在老師那里得到了一個正整數(shù)數(shù)對(x, y), 牛牛忘記他們具體是多少了。
但是牛牛記得老師告訴過他x和y均不大于n, 并且x除以y的余數(shù)大于等于k。
牛牛希望你能幫他計算一共有多少個可能的數(shù)對。
思路:枚舉y(當心k=0的情況,當時沒考慮,80%通過率)
#include <iostream> #include <algorithm> using namespace std;int main() {long long n,k;cin>>n>>k;long long ans=0;for(int y=max(1LL,k);y<=n;++y){int res=0;res=n/y*(y-k);if(n%y>=k)if(k)res+=n%y-k+1;else res+=n%y;ans+=res;}cout<<ans<<endl; }題3:為了找到自己滿意的工作,牛牛收集了每種工作的難度和報酬。牛牛選工作的標準是在難度不超過自身能力值的情況下,牛牛選擇報酬最高的工作。在牛牛選定了自己的工作后,牛牛的小伙伴們來找牛牛幫忙選工作,牛牛依然使用自己的標準來幫助小伙伴們。牛牛的小伙伴太多了,于是他只好把這個任務(wù)交給了你。
思路:簡單的背包
#include <stdio.h> #include <algorithm> using namespace std; typedef pair<int,int>pii;const int N=100010;pii dat[N],a[N]; int ans[N];void solve(){int n,m;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d%d",&dat[i].first,&dat[i].second);sort(dat+1,dat+n+1);for(int i=1;i<=m;i++) scanf("%d",&a[i].first),a[i].second=i;sort(a+1,a+m+1);int cur=0;for(int i=1,j=1;j<=m;j++){while(i<=n && dat[i].first<=a[j].first){cur=max(cur,dat[i].second);i++;}ans[a[j].second]=cur;}for(int i=1;i<=m;i++) printf("%d\n",ans[i]); }int main(){solve();return 0; }總結(jié)
以上是生活随笔為你收集整理的网易2019实习生Java编程题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。