Codeforces 802 补题
Posted 逐雪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 802 补题相关的知识,希望对你有一定的参考价值。
A
水题 同B
#include<cstdio> #include<cstdlib> #include<cstring> using namespace std; const int maxn=1000000; int n,k,a[maxn],num; bool ex[maxn],need[maxn]; int main() {//freopen("t.txt","r",stdin); scanf("%d%d",&n,&k); num=0; memset(ex,0,sizeof(ex)); for(int i=0;i<n;i++) scanf("%d",&a[i]); int ans=0; for(int i=0;i<n;i++) { if(ex[a[i]]) continue; if(num<k) { num++; ans++; ex[a[i]]=true; } else { int sum=0; memset(need,0,sizeof(need)); for(int j=i+1;j<n&&sum<k-1;j++) { if(!ex[a[j]])continue; if(need[a[j]]==false)sum++; need[a[j]]=true; } for(int j=1;j<=n;j++) { if(ex[j]&&(!need[j])){ex[j]=false;ex[a[i]]=true;ans++;break;} } } } printf("%d\n",ans); return 0; }
B
C
D
根据泊松分布的特点,对称轴两边的概率密度最大。
用这个特点来判断是泊松分布还是平均分布。
#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int a[250],b[250]; int main() { int T; scanf("%d",&T); while(T--) { for(int i=0;i<250;i++)scanf("%d",&a[i]); //for(int i=0;i<250;i++)scanf("%d",&b[i]); int mina=a[0],maxa=a[0],minb=b[0],maxb=b[0]; double mida=0; for(int i=0;i<250;i++) { mida+=a[i]; //minb=min(minb,b[i]);maxb=max(maxb,b[i]); } mida/=250.; int sum=0,sumb=0; double len=mida/2; for(int i=0;i<250;i++) { if(a[i]>(mida-len)&&a[i]<(mida+len))sum++; if(a[i]<=1)sumb++; } if(sum<180||sumb>3)printf("uniform\n"); else printf("poisson\n"); } return 0; }
E
F
G
公共子序列问题 O(N^2)
#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<string> #include<vector> #include<cstring> using namespace std; int dp[1000][1000]; int LCS(int n1,int n2,string s1,string s2) { for(int i=0;i<n1;i++) for(int j=0;j<n2;j++) { if(i>0)dp[i][j]=dp[i-1][j]; if(j>0&&dp[i][j-1]>dp[i][j])dp[i][j]=dp[i][j-1]; if(s1[i]==s2[j]) { if(i==0||j==0)dp[i][j]=1; else dp[i][j]=dp[i-1][j-1]+1; } } return dp[n1-1][n2-1]; } int main() {//freopen("t.txt","r",stdin); ios::sync_with_stdio(false); string s1,s2; s2="heidi"; while(cin>>s1) { memset(dp,0,sizeof(dp)); int len=LCS(s1.length(),s2.length(),s1,s2); if(len==5)printf("YES\n"); else printf("NO\n"); s1.clear();s2.clear(); } return 0; }
H
I
J
水题
#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<string> #include<vector> #include<cstring> using namespace std; vector<int>adj[200]; int w[200][200]; int dist[200]; void dfs(int cur,int fa,int len) { for(int i=0;i<adj[cur].size();i++) { int ne=adj[cur][i]; if(ne==fa)continue; dist[ne]=min(dist[ne],len+w[cur][ne]); dfs(ne,cur,len+w[cur][ne]); } } int main() {//freopen("t.txt","r",stdin); int n; scanf("%d",&n); int u,v; for(int i=0;i<n-1;i++) { scanf("%d%d",&u,&v); scanf("%d",&w[u][v]); w[v][u]=w[u][v]; adj[u].push_back(v); adj[v].push_back(u); } for(int i=1;i<n;i++) dist[i]=99999999; dist[0]=0; dfs(0,-1,0); int ans=0; for(int i=0;i<n;i++) ans=max(ans,dist[i]); printf("%d\n",ans); return 0; }
K
L
M
每个序列排序后前k个数的和
#include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; int num[3000]; int main() {//freopen("t.txt","r",stdin); int n,m,t; int mins=-1; scanf("%d%d",&n,&m); for(int i=0;i<n;i++) { scanf("%d",&num[i]); } sort(num,num+n); int ans=0; for(int i=0;i<m;i++) ans+=num[i]; printf("%d\n",ans); return 0; }
以上是关于Codeforces 802 补题的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #634 (Div. 3) 补题
Codeforces Round #639 (Div. 2) 补题
Codeforces Round #639 (Div. 2) 补题
Codeforces Round #647 (Div. 2) - Thanks, Algo Muse! (A-C) (持续补题跟进)