閱讀221 返回首頁    go windows


WIKIOI-1059 汽車裝油

1059 汽車裝油
題目描述 Description
    設在一環行公路上有N個汽車站,每一站存有若幹數量的汽油(其中有的站可能不存)。現在使一輛原來沒有油的汽車從某站依反時針方向沿公路行駛,車站編號為反時針;每到一站即把該站的汽油全部帶上(出發的站也如此)。試求從哪幾站出發可以使汽車從該站出發環行一周,不致在中途因缺油而停車。

輸入描述 Input Description
輸入:輸入文件第一行有一個N(站點數N<1000), 第二行有N個數字m1 m2 …… mn,數字間用空格作分隔符(mi描述第I站的存油數,mi≤100), 第三行有N個數字w1 w2 …… wn,數字間用空格作分隔符(wi描述第I站至第I+1站汽車耗油量,wn描述第n站至第1站的耗油量,wi≤100)。

輸出描述 Output Description

輸出:在一行中按站點編號由小到大輸出可出發站點編號(中間用一個空格分隔)。若不存在可出發站點,則輸出“No Result!”。

樣例輸入 Sample Input
5

2  3  4  5  3

3  2  1  5  4

樣例輸出 Sample Output
2  3

 

AC代碼:

#include<stdio.h>
#include<algorithm>
using namespace std;
int w[2000],v[2000];
int Fun(int x,int n,int sum,int num)
{
     while(num<n)
     {
        sum+=w[x];
        sum-=v[x];
        if(sum<0)
        break;    
        if(x+1==n)
        {x=0;num++;}
        else
        {x++;num++;}
        //printf("sum=%d num=%d\n",sum,num); 
     }
     if(num==n)
     return 1;
     else 
     return 0;
}
int main()
{
    int i,n,sum=0,aws[2000],k=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    scanf("%d",&w[i]);
    for(i=0;i<n;i++)
    scanf("%d",&v[i]);
    for(i=0;i<n;i++)
    {
       //printf("i==%d:\n",i);
       if(Fun(i,n,0,0)==1)
       aws[k++]=i+1;
    }
    sort(aws,aws+k);
    if(k!=0)
    {
       printf("%d",aws[0]);
       for(i=1;i<k;i++)
       printf(" %d",aws[i]);
       puts("");
    }
    else
    printf("No Result!\n");
    return 0;
}


 

最後更新:2017-04-03 12:55:52

  上一篇:go 談android界麵設計
  下一篇:go 分治法-快速排序