Codejudges 登入               會員註冊
CodeJudges
作者 主題:問題
lee444
(李四)

身分:幼兒生
最後登入時間:2012-06-19 22:53
最後登入位置:122.125.137.21
發表時間:2011-12-05 21:27
這題測資應該有問題

連丟NPSC公佈的解答都會錯= =

作者 主題:RE:問題
chou666
(Jay)

身分:幼兒生
最後登入時間:2012-04-17 01:46
最後登入位置:122.125.92.6
發表時間:2011-12-05 21:51
經過檢查,發現是題目的 記憶體限制 (memorylimit: 10000KBytes) 限制了 string 的長度

因此導致 RE。 

為了因應 NPSC 常有的這種大量測資,因此所有題目的記憶體限制全面放寬為 50 MBytes 

如果以前有一些題目覺得 RE 的莫名其妙,可以去重測看看(按 RE 旁的 即可),說不定就過了。

感謝 sa411022  提出這個問題
作者 主題:RE:問題
chou666
(Jay)

身分:幼兒生
最後登入時間:2012-04-17 01:46
最後登入位置:122.125.92.6
發表時間:2011-12-05 21:51
補充: RE 的訊息為 SIGABRT 的才可能是這個問題哦

作者 主題:RE:問題
lee111
(李一)

身分:幼兒生
最後登入時間:2012-04-17 01:46
最後登入位置:122.125.92.6
發表時間:2011-12-05 21:52
一個奇怪的問題

這是NPSC公佈的code:

#include<iostream>
#include<string>

using namespace std;

int main() {
 int n, m;
 while(cin >> n >> m, n) {
  string s, t;
  while(n--) {
   cin >> t;
   s += t;
  }

  int x;
  while(m--) {
   cin >> x;
   cout << s[x-1] ;
  }
  cout << endl;
 }
}

 這是我寫的code:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int n, m;
    while(cin >> n >> m, n)
    {

        string tmp, str;
        while(n--)
            cin >> tmp, str = str + tmp;
        int num;
        while(m--)
            cin >> num, cout << str[num - 1];
        cout << endl;
    }
}

 

明明一模一樣

上面的AC 下面的TLE

不知是何故?

作者 主題:RE:問題
f9506248
(管理員)

身分:幼兒生
最後登入時間:2012-04-17 01:46
最後登入位置:122.125.92.6
發表時間:2011-12-05 21:52
因為這個 operator + 是一個很沒有效率的運算子

它另外產生了一個兩倍長度的字串,然後把第一個字串 copy 進去 再接上 第二個字串

所以效率不好

一般程式少量使用時應該是沒有太大差別,但是比賽題目就是想要測你這一個點 

所以還是得改成用  str = str.append(tmp); 就不會老是重頭 copy 了

這點字串處理跟 JAVA 很像,JAVA 則改用 StringBuffer.append() 來處理字串串接

NPSC 的參考解答 operator += 也是做了 append 的事所以速度過得去

作者 主題:RE:問題
wang555
(王五)

身分:幼兒生
最後登入時間:2012-04-17 01:46
最後登入位置:122.125.92.6
發表時間:2011-12-05 21:52
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(){
    do{
        char in[25][25]={"\0"},ans[50]={"\0"};
        int n,m,a[25]={0};
        register int i;
        scanf("%d",&n);
        scanf("%d",&m);
        if(n==0&&m==0) break;
        for(i=0;i<n;i++){
            scanf("%s",in[i]);
            strcat(ans,in[i]);
        }
        for(i=0;i<m;i++)
            scanf("%d",&a[i]);

        for(i=0;i<m;i++)
            printf("%c",ans[a[i]-1]);
            
 
       }while(1);
    return 0;
}

 

  這是我的code 我也會一直RE

不知道哪邊有錯了...

 可以幫我看看媽?

作者 主題:RE:問題
lee111
(李一)

身分:幼兒生
最後登入時間:2012-04-17 01:46
最後登入位置:122.125.92.6
發表時間:2011-12-05 21:53
所以admin大大您的意思是說

a += b; 會比 a = a + b; 快囉?

作者 主題:RE:問題
f9506248
(管理員)

身分:幼兒生
最後登入時間:2012-04-17 01:46
最後登入位置:122.125.92.6
發表時間:2011-12-05 21:53
是啊, += 比較快

作者 主題:RE:問題
judy
(Judy)

身分:幼兒生
最後登入時間:2012-04-17 01:46
最後登入位置:122.125.92.6
發表時間:2011-12-05 21:53
回樓上上上:這是高中組的,n最大到1000000,m最大到100 

//感覺國中組的好簡單,連strcat都會過......

作者 主題:RE:問題
wu888wu
(Jacky)

身分:幼兒生
最後登入時間:2012-04-17 01:46
最後登入位置:122.125.92.6
發表時間:2011-12-05 21:54
但是+=會比=快只限於某些情況吧

程式語言內建的型態如int, long, 等等的,應該就不會比較快?

應該是重載運算子的差異?

對於string來說, 

是不是因為operator+可能是c=a+b的情況,

所以才產生2倍長的字串,而比較慢,

首頁 | 當前第 | 共2頁 |
大葉大學資訊工程學系學生專題製作
參與人:F9506248 劉煥彥、F9506251 呂翊銘