A. Be Positive
其实就是找正数的数量和负数的数量。
#include<bits/stdc++.h>
using namespace std;
#define lld %I64d
#define REP(i,k,n) for(int i=k;i<n;i++)
#define REPP(i,k,n) for(int i=k;i<=n;i++)
#define mst(a,k) memset(a,k,sizeof(a))
#define LL long long
#define mod 1000000007
#define INF 0x3f3f3f3f
#define pii pair<int,int>
#define mpa make_pair
inline LL read(){LL s=0;char ch=getchar();for(; ch<'0'||ch>'9'; ch=getchar());for(; ch>='0'&&ch<='9'; ch=getchar())s=s*10+ch-'0';return s;}
int main()
{
int n;
scanf("%d",&n);
int pos=0,neg=0;
REP(i,0,n)
{
int x;
scanf("%d",&x);
if(x>0)
pos++;
if(x<0)
neg++;
}
if(pos<round(n/2.0)&&neg<round(n/2.0))
printf("0\n");
else
{
if(pos>=neg)
printf("1\n");
else
printf("-1\n");
}
}
B. Two Cakes
由于size必须按顺序购买,所以一段一段地考虑距离。
桶结构记录各个size出现的位置。
ans+=min(abs(num[i][0]-num[i-1][0])+abs(num[i][1]-num[i-1][1]),abs(num[i][1]-num[i-1][0])+abs(num[i][0]-num[i-1][1]));
#include<bits/stdc++.h>
using namespace std;
#define lld %I64d
#define REP(i,k,n) for(int i=k;i<n;i++)
#define REPP(i,k,n) for(int i=k;i<=n;i++)
#define mst(a,k) memset(a,k,sizeof(a))
#define LL long long
#define mod 1000000007
#define N 100050
#define INF 0x3f3f3f3f
#define pii pair<int,int>
#define mpa make_pair
inline LL read(){LL s=0;char ch=getchar();for(; ch<'0'||ch>'9'; ch=getchar());for(; ch>='0'&&ch<='9'; ch=getchar())s=s*10+ch-'0';return s;}
int num[N][3];
int main()
{
int n;
scanf("%d",&n);
mst(num,0);
REPP(i,1,n*2)
{
int x;
scanf("%d",&x);
if(num[x][0]==0)
num[x][0]=i;
else
num[x][1]=i;
//printf("%d %d %d\n",x,num[x][0],num[x][1]);
}
num[0][0]=1;num[0][1]=1;
LL ans=0;
REPP(i,1,n)
{
//printf("%d %d\n",num[i][0],num[i][1]);
ans+=min(abs(num[i][0]-num[i-1][0])+abs(num[i][1]-num[i-1][1]),abs(num[i][1]-num[i-1][0])+abs(num[i][0]-num[i-1][1]));
//printf("%d\n",ans);
}
printf("%lld\n",ans);
}
C题题解明天写,不会鸽。。咕咕