解題思路:
其實題目自帶的題解已經交代的比較清楚了。但是如果完全按照題目自帶的解法來計算,肯定是會超時的。因為無論如何還是o(n^2)的解法,當然也可能是彩筆我比較菜只能寫出這樣的。
所以需要一些轉換。
這個題目給的記憶體空間為1024m,顯然我們要用空間換時間了。
就以單個科目為例吧。假設a[i]表示第i個學生在語文這個科目上的排名,index[a[i]] = i表示語文排名為a[i]的是第i個學生。這個時候,設定bitsetyuwen[maxn],其中yuwen[i]表示在語文成績排名為i的前面的學生集合。
所以可以o(n)得到整個yuwen集合,然後再利用前面索引出來的index,就可以整體o(n)的求出結果了。
**:
#include using namespace std;
const int maxn = 3e4 + 5;
int a[maxn][5], inx[maxn][5];
bitsetbs[maxn][5], ans;
int main()
}for ( int i = 2; i <= n; ++i )
}for ( int i = 1; i <= n; ++i )
cout << ans.count() << endl;
}return 0;
}
順便附乙個,根據題目自帶題解寫的東西...最後只有80/100這樣的結果= =還是超時了
#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
const int maxn = 3e4 + 5;
bitsetnum[5], ans;
int rak[maxn][5], inx[maxn][5];
int main() ;
cin >> n;
for ( int i = 1; i <= n; ++i )
}for (int i = 0; i < 5; ++i) num[i].reset();
for ( int i = 1; i <= n; ++i ) else
}ans.set();
for ( int k = 0; k < 5; ++k )
cout << ans.count() << endl;
}return 0;
}
HihoCoder 1513 小Hi的煩惱
小hi從小的一大興趣愛好就是學習,但是他發現儘管他認真學習,依舊有學神考的比他好。小hi在高中期間參加了市裡的期末考試,一共五門 語文 數學 英語 物理 化學。成績出來之後,小hi發現有些同學,所有科目都考的比他好,他很煩惱。所以他想知道所有科目都比自己名次靠前的同學的人數。為了方便,可以認為不存在...
hihoCoder 1513 小Hi的煩惱
我會五維數點辣 只要用個bitset亂搞就好了 記錄一下rk i j 表示第j科排名為i的是誰 用30000 5個大小為30000的bitset s i j 是乙個bitset表示第j科,排名為1 i的人是多少 最後只要對於每個人,把每一維小於它的集合and起來,然後用count 函式輸出裡面1的個...
hihoCoder 1606 小Hi和小Ho的密碼
時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述小hi和小ho一直使用加密的方式傳輸訊息。他們使用如下方法來生成一組密碼 首先小hi和小ho選擇乙個整數 n pk 其中p質數 k是正整數,也即n是質數或質數的冪 其次,他們會求出兩個整數a和b滿足0 a b n,並且,n...