20190901笔试日记

拼多多20190901

1.

有一堆整数,偶数的优先级比奇数的优先级大,同为奇数或者偶数,数值大的优先级大,要求对其排序,输出优先级最高的前n个数。

输入只有一行,s1,s2,s3...,sk;n。

输出优先级最高的前n个数。

#include
#include
#include
#include
#include
#include
#include
using namespace std;
vector shu;
bool cmp(int a,int b){
	if(a%2==0&&b%2==1)
	return true;
	if(b%2==0&&a%2==1)
	return false;
	return a>b;
}
int main(){
	int n;
	int s;
	char c;
	scanf("%d",&s);
	shu.push_back(s);
	while(scanf("%c",&c)&&c!=';'){
		scanf("%d",&s);
		shu.push_back(s);
	}
	scanf("%d",&n);
	sort(shu.begin(),shu.end(),cmp);
	for(int i=0;i 
  

2.

20190901笔试日记_第1张图片

 

20190901笔试日记_第2张图片

#include
#include
#include
#include
#include
#include
#include
using namespace std;
void solve(vector& ans,string str1,string str2,string ne,string a){
	if(str1.size()==0){
		if(!ne.compare(str2))
		ans.push_back(a);
		return;
	}
	//cout<>str1>>str2;
		vector ans;
		string ne;
		string a;
		solve(ans,str1,str2,ne,a);
		//sort(ans.begin(),ans.end());
		printf("{\n");
		for(int i=0;i 
  

3.

有n个骰子,每个骰子的可得到的结果数量是xi,即可得到[1,xi]这几个数字。

给出n,

x1,x2,x3,...,xn

求投掷这n个骰子所得到的最大值的期望

#include
#include
#include
#include
#include
#include
#include
using namespace std;
vector shu;
int main(){
	int n;
	int s,maxs=0;
	scanf("%d",&n);
	for(int i=0;i>s;
		shu.push_back(s);
		if(s>maxs)
		maxs=s;
	}
	double ans=0;
	double now=0,pre=0;
	for(int i=1;i<=maxs;i++){
		now=1.0;
		for(int j=0;j=i)
			now=now*i/shu[j];
			else
			now=now*1;		
		}
		cout< 
  

4.

20190901笔试日记_第3张图片

 

腾讯20190901

1.

t个测试用例。

每个用例有n个数,n为偶数,每次从n个数中选2个不相同的数删掉,最后能不能将n个数完全删掉。

输出YES或者NO。

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int t;
int main(){
	int n;
	int s;
	scanf("%d",&t);
    while(t--){
        cin>>n;
        map ma;
        for(int i=0;i>s;
            if(ma.count(s)==0){
                ma[s]=1;
            }
            else
                ma[s]++;
        }
        int maxi=0;
        for(map::iterator it1=ma.begin();it1!=ma.end();it1++){
            if(it1->second>maxi)
            maxi=it1->second;
        }
        if(maxi>n/2)
        cout<<"NO"< 
  

2.

种一排花,红花无限制,连续的白花必须是k的倍数(包括0),

t是测试用例数,k的意义如上,

每个用例给定[s,e],花的总长度s到e,给出所有的情况数量。

#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define mod 1000000007
int t,k;
long long res[3][100005];
long long solve(int state,int len){
	if(res[state][len]!=0)
	return res[state][len];
	if(len<0)
	return 0;
	if(len==0){
		res[state][len]=1;
		return res[state][len];
	}
	res[state][len]= solve(1,len-1)+solve(2,len-k);
	return res[state][len];
}
int main(){
	long long ans;
	int s,e;
	cin>>t>>k;
	for(int i=0;i>s>>e;
		for(int j=s;j<=e;j++){
			ans=ans+solve(0,j);
		}
		cout< 
  

3.

输入,n,p,q,

n个硬币,至少p个正面向上,至少q个反面向上,求正面向上硬币数量的数学期望

比如:输入2 1 0

20190901笔试日记_第4张图片

复杂度有点高,不知道如何优化,,,

#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define mod 100000007
int n,p,q;
long long solve(int n,int m){
	long long ans = 1;
	if(m < n-m) 
	m = n-m;
	for(int i = m+1; i <= n; i++) ans *= i;
	for(int j = 1; j <= n - m; j++) ans /= j;
	return ans;
}
int main(){
	long long ans1=0,ans2=0,temp,ans;
	cin>>n>>p>>q;
	for(int i=p;i<=n-q;i++){
		temp=solve(n,i);
		ans2=ans2+temp;
		ans1=ans1+temp*i;
	}
	ans1=ans1%mod;
	ans2=ans2%mod;
	//cout< 
  

4.

一个字符串是由一个子串不断重复而成,

输入

n

str

str就是这个字符串的前n个字符

下面是t个测试用例

每个用例是字符串

判断这个字符串能否生成str

超时了,待优化。。。

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
vector shu;
int n;
int main(){
	cin>>n;
	string str;
	cin>>str;
	int t;
	cin>>t;
	int ans=0;
	while(t--){
		string s;
		cin>>s;
		string s1=s;
		int l=s1.size();
		if(!str.compare(s1.substr(0,l))){
			while(l 
  

算式排序

20190901笔试日记_第5张图片

from copy import copy

n = int(input())
s = input()
tmp = s.split()

def my_eval(l):
 s = ''.join(l)
 return eval(s)

for i in range(n):
 for j in range(n-1):
  t = copy(tmp)
  if int(tmp[2*j]) > int(tmp[2*j+2]):
   t[2*j], t[2*j+2] = t[2*j+2], t[2*j]
   if my_eval(t) == my_eval(tmp):
    tmp = t

print(' '.join(tmp))

你可能感兴趣的:(笔试)