拼多多-技术类笔试-20190728

1.

拼多多-技术类笔试-20190728_第1张图片

找到数组A中的逆序对(相等也算),有两个位置,数组B中的元素替换时,这两个位置都可以替换

#include
#include
#include
#include
#include
#include
#include
using namespace std;
vector shua,shub;
int main(){
	string line;
	getline(cin,line);
	stringstream ss1(line);
	int s,lena=0,lenb=0;
	while(ss1 >> s){
		shua.push_back(s);
	}
	getline(cin,line);
	stringstream ss2(line);
	while(ss2>>s){
		shub.push_back(s);
	}
	int pa=shua.size()-1;
	for(int i=0;i=shua[i+1]){
			pa=i;
			break;
		}
	}
	sort(shub.begin(),shub.end());
	int x;
	bool find=false;
	for(x=shub.size()-1;x>=0;x--){
		//printf("%d\n",x);
		for(int j=1;j>=0;j--){
			if(pa+j==shua.size()-1){
				if(shub[x]>shua[pa+j-1]){
					shua[pa+j]=shub[x];
					find=true;
					break;
				}
			}
			else{
				if(pa+j==0){
					if(shub[x]shua[pa+j-1]&&shub[x]

2.

拼多多-技术类笔试-20190728_第2张图片

 测试用例比较弱,忽略乱序就能过90%。统计头尾次数是否为偶数就能A。

真正的解法是:任取一个字符串,记录头尾字符串S,在剩余的字符串中找一个S尾开头的,更新头和尾,直到最后一个满足条件返回true,期间如果找不到开头的,返回false。

#include
#include
#include
#include
#include
using namespace std;

const int maxn=1030;
string str[maxn];

int main(){
	string s;
	string line;
	getline(cin,line);
	stringstream ss1(line);
	int i=0;
	while(ss1>>s){
	  str[i++]=s;
	}
	bool flag=true;
	string s1=str[0];
	string s2=str[i-1];
	int len2=s2.length();
	if(s1[0]!=s2[len2-1]){
		flag=false;
	}
	if(flag==true){
		for(int j=0;j

3.

拼多多-技术类笔试-20190728_第3张图片

拼多多-技术类笔试-20190728_第4张图片

拓扑排序

#include 
#include 
#include 

using namespace std;

struct Edge
{
	int to,next;
}e[110000];

int n,m,in[11000];
int cnt,p[11000];

pair a[11000];

typedef pair PII;
priority_queue,greater > Q;

void insert(const int &x,const int &y)
{
	in[y]++;
	e[++cnt].to=y;
	e[cnt].next=p[x];
	p[x]=cnt;
}

void Topo()
{
	while(!Q.empty())
	{
		int t=Q.top().second; Q.pop();
		cout << t << ' ';
		for(int i=p[t];i;i=e[i].next)
			if(--in[e[i].to]==0) Q.push(a[e[i].to]);
	}
	cout << endl;
	return ;
}

int main()
{
	cin >> n >> m;
	for(int i=1;i<=n;++i)
	{
		cin >> a[i].first;
		a[i].second=i;
	}
	for(int i=1;i<=m;++i)
	{
		int x,y;
		cin >> x >> y;
		insert(x,y);
	}

	for(int i=1;i<=n;++i)
		if(in[i]==0) Q.push(a[i]);

	Topo();
	return 0;
}

4.

拼多多-技术类笔试-20190728_第5张图片

拼多多-技术类笔试-20190728_第6张图片

dp,待改进 

#include 
#include 

using namespace std;

int f[110][8100];
pair a[1100];

int getLast(int i)
{
	int temp=a[i].first;
	while(a[i].first==temp)i--;
	return i;
}

int main()
{
	int n,Max=0,Ans=0;
	cin >> n;
	for(int i=1;i<=n;++i)
		cin >> a[i].first;
	for(int i=1;i<=n;++i)
	{
		cin >> a[i].second;
		Max=max(Max,a[i].second);
	}

	sort(a+1,a+n+1);

	for(int i=1;i<=n;++i)
		for(int j=1;j<=Max<<3;++j)
		{
			if(a[i].second<=j && j<=a[i].second<<3)
				f[i][j]=max(f[i-1][j],f[getLast(i)][j-a[i].second]+1);
			else f[i][j]=f[i-1][j];
			Ans=max(Ans,f[i][j]);
		}

	cout << Ans << endl;

	return 0;
}

 

你可能感兴趣的:(C语言基础,笔试)