360笔试编程题解,参考
C卷
第一题:大概是个原题,之前做过链接:
https://www.luogu.org/problemnew/solution/P1187
#include<bits/stdc++.h> using namespace std; #define maxn 1000+100 int a[maxn][maxn]; int main(){ int n,m; cin>>n>>m; for(int j=1;j<=n;j++){ for(int k=1;k<=m;k++){ int x; cin>>x; a[j][k]=x; } } long long ans=0; for(int j=1;j<=n;j++){ for(int k=1;k<=m;k++){ ans+=6*a[j][k]; if(a[j][k]>1){ ans-=(a[j][k]-1)*2; } ans-=min(a[j][k],a[j-1][k]); ans-=min(a[j][k],a[j+1][k]); ans-=min(a[j][k],a[j][k-1]); ans-=min(a[j][k],a[j][k+1]); } } cout<<ans<<endl; return 0; }
第二题,我直接暴力解,先排序,然后贪心,这题复杂度太假了,最后偶尔能过100% 有点卡常
#include<bits/stdc++.h> using namespace std; typedef long long ll; int t1[100010],t2[100010]; int tmp[100010],tot=0; int main() { int n,m;scanf("%d%d",&n,&m); multiset<int> s1,s2; for(int i=1;i<=n;i++){ int tmp;scanf("%d",&tmp);s1.insert(tmp); } for(int i=1;i<=n;i++){ int tmp;scanf("%d",&tmp);s2.insert(tmp); } for(int i=m-1;i>=0;i--){ tot=0; for(multiset<int>::iterator j=s1.begin();j!=s1.end();++j){ if(s2.find((i-(*j)+m)%m)!=s2.end()){ tmp[tot++]=*j; s2.erase(s2.find((i-(*j)+m)%m)); printf("%d ",i); } } for(int j=0;j<tot;j++){ s1.erase(s1.find(tmp[j])); } } return 0; }#360公司##题解##笔试题目##春招#