0316字节跳动笔试
0316字节跳动笔试

#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
long long a[100005];
long long n,m;

void input()
{
	for(int i=0;i<n;i++)
	{
		int t;
		scanf("%d",&t);
		a[i]=t;
	}
}

double binary(double L,double R)
{
	//cout<<L<<" "<<R<<endl;
	if(R-L<0.001) return L;
	double M=(L+R)/2;
	long long sum=0;
	for(int i=0;i<n;i++)
		sum+=(long long)a[i]/M;
	if(sum>=m)
		return binary(M,R);
	else 
		return binary(L,M);
}
int main(){
	cin>>n>>m;
		input();
		double sum=0;
		for(int i=0;i<n;i++)
			sum+=a[i]; 
		double ans=binary(1e-5,sum/m);
		printf("%.2f\n",ans); 
		//printf("%lld.%02lld\n",ans/100,ans%100); 
	
	
	return 0;
} 

0316字节跳动笔试
0316字节跳动笔试

#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
int a[100005],n;
int du[100005],ans[100005];
vector<int> G[100005];
void init()
{
	for(int i=0;i<n;i++)
	{
		du[i]=0;
		ans[i]=0;
		G[i].clear();
	}
}
void input()
{
	for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
	for(int i=0;i<n;i++)
	{
		for(int j=-1;j<=1;j+=2)
		{
			int v=(i+j+n)%n;
			if(a[i]>a[v])
			{
				du[i]++;
				G[v].push_back(i);
			}
		}
	}
}
void tuopu(){
	queue<int>q;
	for(int i=0;i<n;i++) 
		if(du[i]==0)
			q.push(i);
	while(!q.empty())
	{
		int t=q.front();
		q.pop();
		for(int i=0;i<G[t].size();i++)
		{
			int v=G[t][i];
			du[v]--;
			ans[v]=max(ans[v],ans[t]+1);
			if(du[v]==0)
			{
				q.push(v);
			}
		}
	}
	
}
int main(){
	int T;
	cin>>T;
	while(T--)
	{
		cin>>n;
		init();
		input();
		//for(int i=0;i<n;i++) cout<<du[i]<<endl;
		tuopu();
		
		long long sum=0;
		for(int i=0;i<n;i++) sum+=ans[i]+1;
		cout<<sum<<endl;
	}
	return 0;
} 

0316字节跳动笔试
0316字节跳动笔试

相关文章: