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;
}
原文:http://www.cnblogs.com/heisenberg-/p/6916520.html