2015-01-31 350 views
-35

如何減少C++代碼的執行時間。 舞會晚上,每個男孩和女孩都應該以這樣的方式跳舞,這樣男孩的身高必須比男孩身高更長。每個男孩和女孩應該有一雙。C++代碼的時間限制

代碼示例:

#include <bits/stdc++.h> 
#define _ ios_base::sync_with_stdio(false);cin.tie(0);using namespace std; 
#define pb push_back 
#define pob pop_back 
#define pf push_front 
#define pof pop_front 
#define mp make_pair 
#define all(a) a.begin(),a.end() 
#define bitcnt(x) __builtin_popcountll(x) 
#define MOD 1000000007 
#define total 5000005 
#define M 1000000000001 
#define NIL 0 
#define MAXN 200001 
#define EPS 1e-5 
#define INF (1<<28) 

typedef unsigned long long int uint64; 
typedef long long int int64; 
vector<int>b,g; 

int main() 
{ 
    int t,j,n,m,i; 
    freopen("input.txt","r",stdin); 
    freopen("output.txt","w",stdout); 
    cin>>t; 
    while(t--) 
    { 
     b.clear(); 
     g.clear(); 
     cin>>n>>m; 
     for(i=0;i<n;i++) 
     { 
      cin>>j; 
      b.pb(j); 
     } 
     for(i=0;i<m;i++) 
     { 
      cin>>j; 
      g.pb(j); 
     } 
     sort(all(b)); 
     sort(all(g)); 
     j=0; 
     for(i=0;i<m;i++) 
     { 
      if(j==n) 
       break; 
      if(g[i]<b[j]) 
      { 
       j++; 
       continue; 
      } 
     } 
     if(j==n) 
      printf("YES\n"); 
     else 
      printf("NO\n"); 
    } 
    fclose(stdout); 
    return 0; 
} 
+11

你真的需要一個打字或鍵盤類,所以你不需要'#define pb push_back'之類的東西。這種縮寫使您的程序不易讀取,並且更難以進行代碼檢查。 – 2015-01-31 20:38:37

+3

您正在*使用'stdin'和'cin'穿過流*。 (參考:電影GhostBusters)。決定C++流還是C風格I/O; 'printf'或'cout'; 'fscanf(stdin)'或'cin'。 – 2015-01-31 20:40:35

+3

投資於運營商的空間,因爲它使代碼更易於閱讀。這些空間是免費的,不會增加任何時間進行編譯,構建或執行。空格不會爲可執行文件添加更多大小。一個易於閱讀的程序將包含更少的缺陷。除非你的鍵盤工作不正常。 – 2015-01-31 20:42:17

回答

6

有幾件事情中脫穎而出:

  1. IO緩慢,especially when using int n; cin >> n;
  2. 如果知道n != m,則不需要執行排序,也不需要測試,畢竟如果沒有相等數量的男孩和女孩就不可能配對。
  3. 通過向量調用reserve可以徹底消除重新分配的數量 - 特別是如果您知道它將提前多大。
  4. 你的算法其實很不錯 - 重用std::sort幫助。事實上,不知道你使用的是什麼類型的數據集,我會說它的確需要很少的時間。
  5. 縮短名稱不會使變量的運算更快。但它可以使它easier to read使它們具有描述性。