CQ18高一暑假前挑战赛3标程
Posted ---学习ing---
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CQ18高一暑假前挑战赛3标程相关的知识,希望对你有一定的参考价值。
【A:LCM】
#include<bits/stdc++.h> using namespace std; #define ll long long int main() { ll a,b,g; cin>>a>>b; g=__gcd(a,b); cout<<a/g*b<<endl; return 0; }
【B:STL,用set或者queue+map都行】
#include<bits/stdc++.h> using namespace std; #define ll unsigned long long const int maxn=100010; const ll inf=1e18; ll a[maxn]; int cnt; set<ll>s; void solve() { s.insert(2); s.insert(3); s.insert(5); while(!s.empty()){ ll now=*s.begin(); a[++cnt]=now; s.erase(s.begin()); if(now*2<=inf) s.insert(now*2); if(now*3<=inf) s.insert(now*3); if(now*5<=inf) s.insert(now*5); } } int main() { solve(); int T; ll N; scanf("%d",&T); while(T--){ scanf("%lld",&N); int pos=lower_bound(a+1,a+cnt+1,N)-a; printf("%lld\n",a[pos]); } return 0; }
【C:贪心水题】
#include<bits/stdc++.h> using namespace std; const int maxn=100010; int a[maxn]; int main() { int N,M,i,j,ans=0; scanf("%d%d",&N,&M); for(i=1;i<=N;i++) scanf("%d",&a[i]); sort(a+1,a+N+1); j=1; for(i=N;i>=j;i--){ if(i!=j&&a[i]+a[j]<=M) j++; ans++; } printf("%d\n",ans); return 0; }
【D:暴力求得每个数的因子,复杂度O(Nsqrrt(N))】
#include<bits/stdc++.h> using namespace std; const int maxn=1000010; int num[maxn]; int main() { int N,x,i,j,ans=0; scanf("%d",&N); for(i=1;i<=N;i++){ scanf("%d",&x); for(j=1;j*j<=x;j++){ if(x%j==0){ num[j]++; if(num[j]>1) ans=max(ans,j); if(j*j!=x) { num[x/j]++; if(num[x/j]>1) ans=max(ans,x/j); } } } } printf("%d\n",ans); return 0; }
【E:区间DP,和前天那个有点像】
#include<bits/stdc++.h> using namespace std; #define ll long long const int maxn=510; ll sum[maxn][maxn]; int ans,x; int main() { int N,M,i,j,k; while(~scanf("%d%d",&M,&N)){ ans=0; for(i=1;i<=N;i++) for(j=1;j<=M;j++) scanf("%d",&x),sum[i][j]=sum[i-1][j]+x; for(i=1;i<=N;i++) for(j=i;j<=N;j++){ int tmp=0; for(k=1;k<=M;k++){ tmp+=sum[j][k]-sum[i-1][k]; if(tmp<0) tmp=0; if(tmp>ans) ans=tmp; } } printf("%d\n",ans); } return 0; }
【F:KMP】
请先自学吧。
以上是关于CQ18高一暑假前挑战赛3标程的主要内容,如果未能解决你的问题,请参考以下文章