4311. 最小值
1.精度问题—>已解决
//double 在小数点后6位以内的情况下放心大胆算
````
#include[HTML_REMOVED]
using namespace std;
int n,m;
int main(){
cin>>n>>m;
double ans=m;
double x=100000;
for(int i=0;i[HTML_REMOVED]>a>>b;
x=min(x,(double)a/b);
}
printf(“%.06lf”,ans*x);
return 0;
}
--------------------------------------------------------------------------------------------------
#### 4312. 出现次数
//前缀和思想解决问题------>注意细节处理----->在普通的前缀和问题中两个待求点之间的距离为S[b]-S[a-1];
----------------->但是在本题中应该将a的初始位置进行更新a+m-1(Tips:m为待查询字符串的长度)
````
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int S[N];
int n,m,q;
string s,t;
int main(){
cin>>n>>m>>q;
cin>>s>>t;
//
s=' '+s;
for(int i=m;i<=n;i++){
S[i]=S[i-1];
if(s.substr(i-t.size()+1,t.size())==t)S[i]++;
}
//cout<<q<<endl;
for(int i=0;i<q;i++){
int a,b;
cin>>a>>b;
// cout<<S[b]<<" "<<S[a-1]<<endl;
a=a+m-1;
if (a > b) puts("0");
else cout<<S[b]-S[a-1]<<endl;
}
return 0;
}
满二叉树等长路径
//本题考察了贪心思想+递归的操作以及自己的相对薄弱点递归回溯的过程中对于回溯的结果与实际自己的🙅想法不同
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 2050;
int n;
int q[N];
int ans;
int dfs(int u){
if(2*u>n)return 0;
int sum=0;
int l=dfs(2*u)+q[2*u],r=dfs(2*u+1)+q[2*u+1];
//cout<<abs(l-r)<<endl;
sum=max(l,r);
ans+=abs(l-r);
return sum;
}
int main()
{
cin >> n;
//cout<< (1 << n + 1) - 1 ;
int m=2;
for(int i=0;i<n;i++)m*=2;
n=m-1;
for (int i = 2; i <= n ;i++)cin >> q[i];
dfs(1);
cout << ans << endl;
return 0;
}
求关注