1. 程式人生 > 其它 >關於HUSTOJ的小白記錄一

關於HUSTOJ的小白記錄一

技術標籤:HUSTOJ經驗分享程式人生c++

關於測試資料的表達的一些問題作為一個記錄


前言

自己應為教學的關係搭建了HUSTOJ評測系統,目前也碰到很多的坑,包括伺服器的選購,系統的搭建,資料庫的控制,配置表的操作,以及xftp連線等。作為一個小白,遇到的問題常常因為沒有記錄,導致後面繼續重複出現問題不知道如何去解決,
多次翻閱記錄、重複搜尋答案,效率太過於低下,所以嘗試使用文章記錄的方式。
其中被網友讀到可能是錯誤的內容請見諒。

二、關於測試資料

目前發現的一些規則是:

  1. 測試資料如果是輸入的,如:使用cin 或者 scanf的,都是由testdata中的*.in檔案中獲取。

    使用的測試資料程式碼由本站搜尋獲取並略微改動不到1%(emmmmm

    #include <bits/stdc++.h>
    using namespace std;
    // N 為資料個數,MIN為資料下限,MAX為資料上限。
    const int N = 1000, MIN = 1, MAX = 214740; 
    int main()
    {
       srand(time(0));
       //設定 cout printf 這些輸出流都輸出到 test0.in裡面去
       freopen("test1.in","w",stdout);
       
       int a =0,b = 0;
       //隨機生成 N個數 
       for(int i = 0; i < N; i++)
       {
       	//資料範圍在[MIN,MAX]之間
       	//printf("%d\n",rand()%(MAX-MIN + 1) + MIN);
       	a = rand()%(MAX-MIN+1)+MIN;
       	b = rand()%(MAX-MIN+1)+MIN;
       	cout << a <<' '<< b <<endl;
       }
       //關閉輸出流
    	fclose(stdout);
       return 0;
    }
    
  2. 通過輸入後獲取資料並且對資料進行操作後輸出的,由testdata中的*.out檔案裡的對於行資料進行正確性驗證。依舊使用程式碼批量生成。

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        freopen("test1.in","r",stdin);//設定 cin scanf 這些輸入流都從 test0.in中讀取
        freopen("test1.out","w",stdout);//設定 cout printf 這些輸出流都輸出到 test0.out裡面去
        //寫待測程式,即標程
        
        int a,b,c,max,min;
        while(cin>>a>>b)
        {
    		cout << a+b << endl;
    	}
        
        //關閉重定向輸入
        fclose(stdin);
        //關閉重定向輸出 
    	fclose(stdout);
        return 0;
    }
    
  3. 部分不需要進行輸入的答案,也儘量匯入*.in檔案,檔案內使用幾個空格輸入,據說沒有輸入空格無法上傳,這個我沒有測試過。

  4. 答案唯一的測試用例,嘗試了在*.out中輸入多個答案想用來做非嚴格判題,出錯了。所以目前我只能對單答案的上傳只包含一個答案的用例。這點請明白的給予指點,感謝。

ps:今天修改HOSTOJ系統的時候,不知道發生了什麼,導致我使用的阿里雲伺服器出現500錯誤,最後只能通過之前的映象還原,還有由做映象的習慣,不然要哭死。多備份是一個好習慣。