Problem ID :g061. C.跑跑卡丁車

New Thread

User 關於測資2 一直卡在line 25

fatcat SendIMessage
胖胖貓

g061. C.跑跑卡丁車 | From: 211.72.70.79 | Post Date:2018-07-14 03:29:37.0


 
*** 第 2 點 (80%):WA
與正確輸出不相符(line:25)
您的答案為: Ajmlpdsa
正確答案為: Spgpvxnmj
 
不好意思,這個題目我嘗試過
(1)輸入資料時同時存取輸入進來的順序,再利用 qsort 先根據時間記錄 再根據出現順序做排序
(2)避免精準度 改成 每個時間單位當成十進位處理用int 存起來比較
(3)猜說是錯在輸出順序, 所以先將文字的時間轉換成 double 數值之後做排序找到1/3的值當作介面,再根據當初輸入的陣列,從頭到尾找一遍,只要小於等於1/3界線的數值就輸出
(1)(2)都會卡在測資2 ,但(3)的話連測資1都不會過。想請問一下式作法出錯了嗎?
 


文章類型: 一般 | Reply | Back
User Re:關於測資2 一直卡在line 25

sagit SendIMessage
sagit

g061. C.跑跑卡丁車 | From: 175.181.122.41 | Post Date:2018-07-24 22:39:35.0

你可以去官方網站下載測資檔看自己錯在哪裡,
另外,「NPSC補完計劃」這個網站有一些網友的解題心得。 


文章類型: 一般 | Reply | Back
User Re:關於測資2 一直卡在line 25

fatcat SendIMessage
胖胖貓

g061. C.跑跑卡丁車 | From: 140.113.208.164 | Post Date:2018-07-26 18:44:04.0

你可以去官方網站下載測資檔看自己錯在哪裡,
另外,「NPSC補完計劃」這個網站有一些網友的解題心得。

 

謝謝管理員的回應

我有去下載官方的測資,把答案和自己的輸出比對,比對後是完全一樣的,不知道是程式碼哪邊出錯了呢? 以下是我的C++寫法

 

#include<iostream>

#include<cstdlib>

using namespace std;

#define MaxN 1001

 

struct Usr{

  string name;

  double t;

  int n;

} usr[MaxN];

int compare(const void*a,const void*b){

  Usr *x=(Usr*)a;

  Usr *y=(Usr*)b;

  if(x->t==y->t)

    return x->n-y->n;

  return (x->t>y->t)?1:-1;

}

double StringToTime(string s){

  double t=3600*( 10*(s[0]-'0')+s[1]-'0' )+60*( 10*(s[3]-'0')+s[4]-'0' )+10*(s[6]-'0')+s[7]-'0';

  double base=0.1;

  for(int i=9;i<s.length();base*=0.1)

    t+=(s[i++]-'0')*base;

  return t;

}

int main(){

  int N;

  double record[MaxN];

  string t;

 

  while(cin>>N and N){

    for(int i=0;i<N;i++)

      cin>>usr[i].name>>t,  usr[i].t=StringToTime(t), usr[i].n=i;

    qsort(usr,N,sizeof(usr[0]),compare);

    double boundary=usr[N/3-1].t;

    cout<<"LIST START"<<endl;

    for(int i=0;i<N and usr[i].t<=boundary;i++)

      cout<<usr[i].name<<endl;

    cout<<"LIST END"<<endl;

  }

 

 


文章類型: 一般 | Reply | Back
User Re:關於測資2 一直卡在line 25

sagit SendIMessage
sagit

g061. C.跑跑卡丁車 | From: 175.181.117.128 | Post Date:2018-08-01 23:29:49.0

輸出時要照原本的順序輸出,所以你需要兩個陣列,
一個陣列記錄原始的順序、名字以及時間,
另一個陣列只要有時間就可以,
把第二個陣列排序之後,取得前1/3名次的時間,
再回到第一個陣列輸出符合的選手。 


文章類型: 一般 | Reply | Back
User Re:關於測資2 一直卡在line 25

squaremelon SendIMessage
方形西瓜

g061. C.跑跑卡丁車 | From: 150.117.26.203 | Post Date:2018-09-02 11:54:28.0

輸出時要照原本的順序輸出,所以你需要兩個陣列,
一個陣列記錄原始的順序、名字以及時間,
另一個陣列只要有時間就可以,
把第二個陣列排序之後,取得前1/3名次的時間,
再回到第一個陣列輸出符合的選手。


我是照著這個方法輸出沒錯

可是還是卡line 25

for(i=0;i<n;i++)

data[i].use=0;

people=0;

std::cout<<"LIST START"<<std::endl;

for(i=0;people<n/3;i++)

{

for(j=0;j<n;j++)

{

if(time2[i]==data[j].time&&data[j].use==0)

{

std::cout<<data[j].name<<std::endl;

data[j].use=1;

people++;

}

}

}

std::cout<<"LIST END"<<std::endl; 

 


文章類型: 一般 | Reply | Back
User Re:關於測資2 一直卡在line 25

sagit SendIMessage
sagit

g061. C.跑跑卡丁車 | From: 192.168.2.157 | Post Date:2018-09-03 10:31:07.0

你為什麼不直接求出第1/3的時間是多少,然後跑一次迴圈時間小於或等於的印出來就好。 


文章類型: 一般 | Reply | Back
User Re:關於測資2 一直卡在line 25

squaremelon SendIMessage
方形西瓜

g061. C.跑跑卡丁車 | From: 150.117.26.203 | Post Date:2018-09-04 22:54:19.0

你為什麼不直接求出第1/3的時間是多少,然後跑一次迴圈時間小於或等於的印出來就好。


有點看錯題目了

是要輸出符合的車手

不用排名 

 


文章類型: 一般 | Reply | Back

New Thread

ZeroJudge Forum