要求:
http://codeup.cn/problem.php?cid=100000575&pid=4
说明:
题目的意思是给出几个出口,比如5个出口,每一个与下一个距离为这接下来的五个数字,要求任意给出的一对出口间的最短距离
思路是算出这几个出口间的总距离,然后按顺时针计算给出的出口间的距离,再与sum - 这个距离,比较最小的那个就是要求的。
另外发现我真的是太喜欢用结构体了。。。
代码:
#include <stdio.h>
struct pair{
int paira;
int pairb;
} pairdis[100000];
int str[100000];
int main(){
//n是有多少个数
int n;
scanf("%d",&n);
int record[100000];
int sum = 0;
for(int i = 0;i <n;i++){
scanf("%d",&str[i]);
sum = sum + str[i];
}
//printf("sum=%d\n",sum);
//m是有多少对要求的出口
int m;
scanf("%d",&m);
int min = 0;
int signal = 0;
for(int i = 0;i <m;i++){
scanf("%d %d",&(pairdis[i].paira),&(pairdis[i].pairb));
if(pairdis[i].paira < pairdis[i].pairb){
for(int j = (pairdis[i].paira - 1);j <(pairdis[i].pairb -1) ;j++){
min = str[j] + min;
}
if(min > (sum - min)){
min = sum -min;
}
}
else{
for(int j = (pairdis[i].pairb - 1);j <(pairdis[i].paira -1) ;j++){
min = str[j] + min;
}
if(min > (sum - min)){
min = sum -min;
}
}
record[signal++] = min;
min = 0;
}
for(int i = 0;i <signal;i++){
printf("%d\n",record[i]);
}
}