投了个机器学习岗,发现什么也不会,除了两个编程题。大家应该都会写吧
划分东西
#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;
}