9月19日百度编程题ac代码
发布于 2017-09-19 20:43 2235 次浏览 0 赞 来自 笔试面试  

投了个机器学习岗,发现什么也不会,除了两个编程题。大家应该都会写吧

划分东西

#include<bits/stdc++.h> 
using namespace std;

#define PB push_back  
#define MP make_pair  
#define SZ(v) ((int)(v).size())  
#define FOR(i,a,b) for(int i=(a);i<(b);++i)  
#define REP(i,n) FOR(i,0,n)  
#define FORE(i,a,b) for(int i=(a);i<=(b);++i)  
#define REPE(i,n) FORE(i,0,n)  
#define FORSZ(i,a,v) FOR(i,a,SZ(v))  
#define REPSZ(i,v) REP(i,SZ(v))  
typedef long long ll;
typedef unsigned long long ull;
#define db double
ll gcd(ll a,ll b) { return b==0?a:gcd(b,a%b); }

const int MAXN=100008;

char s[MAXN];
int sum[MAXN];
int main()
{
 	int n;
	while(scanf("%s",s)!=EOF)
	{
		n=strlen(s);
		REP(i,n)
			if(s[i]=='E')
				sum[i]=1;
			else
				sum[i]=0;
		FOR(i,1,n)	sum[i]+=sum[i-1];
		int ans=n-sum[n-1];
		FOR(i,1,n) 
		{
			int shit=sum[i]+n-sum[n-1]-(i+1-sum[i]);
			if(shit<ans)
				ans=shit;
		}
		printf("%d\n",ans);
	}
	return 0;
}

比较两个划分数大小,给出的数都是整数,你可以卡一个bug,而不用double计算出具体的值,避免误差

#include<bits/stdc++.h> 
using namespace std;

#define PB push_back  
#define MP make_pair  
#define SZ(v) ((int)(v).size())  
#define FOR(i,a,b) for(int i=(a);i<(b);++i)  
#define REP(i,n) FOR(i,0,n)  
#define FORE(i,a,b) for(int i=(a);i<=(b);++i)  
#define REPE(i,n) FORE(i,0,n)  
#define FORSZ(i,a,v) FOR(i,a,SZ(v))  
#define REPSZ(i,v) REP(i,SZ(v))  
typedef long long ll;
typedef unsigned long long ull;
#define db double
ll gcd(ll a,ll b) { return b==0?a:gcd(b,a%b); }

const int MAXN=100008;

int a[MAXN];
int b[MAXN];
char ans;
void solve(int a[],int n,int b[],int m)
{
	ans='=';
	int i;
	for(i=0;i<n;i++)
	{
		if(a[i]==b[i])	continue;
		if(a[i]>b[i])
		{
			if(i%2)
				ans='<';
			else
				ans='>';
			break;
		}
		else
		{
			if(i%2)
				ans='>';
			else
				ans='<';
			break;
		}
	}
	if(i==n-1&&m==n+1)
		if(a[n]==b[n]+1&&b[m]==1)
			ans='=';
	if(ans=='='&&i>=n)
	{
		if(m>n)
		{
			if(n%2)
				ans='<';
			else
				ans='>';
		}
	}
}
int main()
{
 	int n,m;
	while(scanf("%d",&n)==1)
	{
		n++;
		REP(i,n)	scanf("%d",&a[i]);
		scanf("%d",&m);
		m++;
		REP(i,m)	scanf("%d",&b[i]);
		if(n<=m)
		{
			solve(a,n,b,m);
			printf("%c\n",ans);
		}
		else
		{
			solve(b,m,a,n);
			if(ans=='>')
				printf("<\n");
			else
				printf(">\n");
		}
	}
	return 0;
}


3 条回复

用double算能AC吗?

2017-09-19 21:08
coder_EERKZNRJ 回复 acmcoder0nAZ8Tju

不知道啊。估计不能ac,误差可能很大

2017-09-19 21:15

百度咋同时有两个笔试,我都不知道去哪个,然后现在来这一看,讨论区很冷清啊

2017-09-19 21:29
添加回复
回到顶部