链接: link.
我们把信件的投递看作在坐标轴上移动,起始坐标为x=1,根据单词的首字母我们建立一个数组存放投递位置的坐标,随着不断移动我们不断更新x的值
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define INF 0x3f3f3f3f
int judge(char s[])
{//我们根据首字母来进行分类储存
if(s[0]=='A'||s[0]=='P'||s[0]=='O'||s[0]=='R')
return 1;
else if(s[0]=='B'||s[0]=='M'||s[0]=='S')
return 2;
else
return 3;
}
int main()
{
char s[100];
int n,t;
int x=1,sum=0;//这相当于我们在坐标轴上移动,x用来记录我们每一步的起始坐标
scanf("%d",&n);
getchar();
while(n--)
{
gets(s);
t=judge(s);
sum+=abs(x-t);
x=t;//更新起始坐标
}
printf("%d",sum);
return 0;
}
链接: link.
左转的车要先让另一对右转或直行的车先通过,我们就循环分情况讨论,直到有一队车辆全部通过,这时另剩余车辆可直接通过无需等待
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
int main()
{
int sum, i, j, len1, len2;
char str1[2010], str2[2010];//记录两队车辆的行驶方向
while (scanf("%s%s", str1, str2) != EOF)
{
len1 = strlen(str1);
len2 = strlen(str2);
sum = 0;
i = j = 0;
while (i < len1 && j < len2)
{
if ((str2[j] == 'L' && str1[i] == 'F') ||
(str2[j] == 'L' && str1[i] == 'R'))//左转遇到右转或直行
{
sum++;
i++;
}
else if ((str1[i] == 'L' && str2[j] == 'F') ||
(str1[i] == 'L' && str2[j] == 'R'))//同上
{
sum++;
j++;
}
else//若不冲突,则均可通过
{
sum++;
i++;
j++;
}
}
//哪队有剩余车辆,把剩余数量加上
if (len1 > i)
sum = sum + len1 - i;
else if (len2 > j)
sum = sum + len2 - j;
printf("%d\n", sum);
memset(str1, 0, sizeof(str1));
memset(str2, 0, sizeof(str2));
}
return 0;
}
链接: link.
两队进行比赛,每次派出一人,我们要想办法让比赛更加具有观赏性,不能一边碾压。我们可以先算出每队的总得分,赢的队伍从小到大输出,输的队伍从大到小输出,这样更具白热化
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = 1010;
struct node
{
int cnt;
int num;
} a[N],b[N];
bool cmp1(node a,node b)
{
return a.cnt<b.cnt;
}
bool cmp2(node a,node b)
{
return a.cnt>b.cnt;
}
int main()
{
int n;
while(cin>>n)
{
int suma = 0;
int sumb = 0;
for(int i=1; i<=n; i++)
{
cin>>a[i].cnt;
suma+=a[i].cnt;
a[i].num = i;
}
for(int j=1; j<=n; j++)
{
cin>>b[j].cnt;
sumb+=b[j].cnt;
b[j].num = j;
}
if(suma>sumb)
{
sort(a+1,a+1+n,cmp1);
sort(b+1,b+1+n,cmp2);
for(int i=1; i<=n; i++)
cout<<a[i].num<<' '<<b[i].num<<endl;
}
else
{
sort(a+1,a+1+n,cmp2);
sort(b+1,b+1+n,cmp1);
for(int i=1; i<=n; i++)
cout<<a[i].num<<' '<<b[i].num<<endl;
}
}
return 0;
}