アリババの筆記試験2020.3.27(貪欲/微分/確率)

肯定:おそらくタイトルはNiu Keのディスカッションエリアからのものです。タイトルの入力、出力、データ範囲も少し不明です。アイデアを見てください。これらの詳細はQAQには関係ありません。間違いがあれば修正してください
〜3.27

トピック1(貪欲)

文字列s1、s2が与えられた場合、s1からs2への最小移動数を見つけます(s1から任意の文字のみを選択し、それをs1の末尾に置くことができる必要があります)
アイデア:貪欲。まず、2つの文字列に対応する文字数が一致しない場合、答えは-1でなければなりません。それ以外の場合は、新しいsを作成してtと等しくする必要があります。sの文字は移動できるため、tの文字は移動できません。したがって、本質は、sの最長の不連続部分文字列を見つけて tのプレフィックス部分文字列一致するようにすることです。これはtのプレフィックス部分文字列と一致するため、貪欲に一致させることができます。sの文字がtの現在の文字と一致するたびに、tの文字は1ビット進みます。最終的な答えは、n-一致できる最大桁数です。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 100010;

char s[maxn],t[maxn];
int mp1[27],mp2[27];//统计各个字符数 
int n;
int main() {
	scanf("%d",&n);
	scanf("%s%s",s,t);
	int j = 0;
	for(int i = 0;i < n;i++) {
		if(s[i] == t[j]) j++;
		mp1[s[i]-'a']++;
		mp2[t[i]-'a']++;
	}
	bool flag = 1;
	for(int i = 0;i < 26;i++) {
		if(mp1[i] != mp2[i]) {
			flag = 0;break;
		}
	}
	if(flag == 0) printf("-1\n");
	else printf("%d\n",n-j);
	return 0;
} 

トピック2(差異/確率)


指定されたN間隔(範囲1〜2000)を参照してください。各間隔には左と右の範囲(1 <= L <= R <= 2000)が含まれ、一度にすべての間隔範囲から整数を選択し、選択されたすべての数値の数を見つけます最小の期待。
アイデア:ここで単一の値の確率を見つけるのは簡単ではありませんが、最初に見つけることができます > = p o s > = pos の確率と、その差を使用して、単一の値の確率を見つけることができます。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 2010;

int n;
int l[maxn],r[maxn];
double p[maxn];
int main() {
	int mn = 2000,mx;//确定最小值范围 
	scanf("%d",&n);
	for(int i = 0;i < n;i++) 
		scanf("%d",&l[i]),mn = min(mn,l[i]);
	for(int i = 0;i < n;i++) 
		scanf("%d",&r[i]);
	double ans = 0;
	bool flag = 1;
	for(int pos = mn;pos <= 2000;++pos) {
		double tmp = 1.0;
		for(int i = 0;i < n;++i) {
			if(r[i] < pos) {
				flag = 0;break;
			}
			if(l[i]<=pos && pos <= r[i])
				tmp *= 1.0*(r[i]-pos+1)/(r[i]-l[i]+1);
		}
		if(!flag) {
			mx = pos-1;break;
		}
		p[pos] = tmp;//计算出最小值>=pos的概率 
	}
	for(int i = mn;i < mx;++i) {
		p[i] -= p[i+1];//差分计算最小值为i的概率 
		ans += p[i]*i; 
	}
	ans += p[mx]*mx;
	printf("%.6f\n",ans);
} 
/*
2
1 2
3 3 
*/
公開された152元の記事 ウォンの賞賛2 ビュー6442

おすすめ

転載: blog.csdn.net/weixin_43918473/article/details/105278826