竹園論壇

標題: c++語法and演算 [打印本頁]

作者: 林宇翔    時間: 2014-10-28 20:31
標題: c++語法and演算
1.cin 輸入經測試發現速度遠慢於scanf 輸入什麼意思
2.如何排序
3.線段樹看了一些文章後還是不太懂
4.最短路怎麼求
作者: Sylveon    時間: 2014-10-28 21:53
你問的問題滿有深度的

A.1
因為C++的Cin/Cout為了能相容C的IO函數(輸入/輸出函數),會採取一個叫與"同步"的動作,這個動作會執行一個flush,而flush是非常緩慢的函數,這也導致了cin/cout的速度遠慢於scanf/printf,但是這個動作是可以取消的!


在程式的第一行加上這一句:
[C++] 純文本查看 復制代碼
ios::sync_with_stdio(false);


就可以取消了。但是取消後,就不再保證scanf/cout混用時的輸出會是正確的,所以你就不能再用scanf輸出。
此外還有一些的地方會執行flush,如 cout<<endl; 打比賽時請不要使用,尤其在非常大的輸出量時。因此我們採用cout<<'\n';來取代。另一個是在cin<<X的時候,為了在你輸入前能把所有資料顯示,也會使用flush,這裡可以用

cin.tie(0);
cin.tie(nullptr); //C++11
來關閉這一個功能,如此一來,你的cin/cout就能大幅改善其執行效率了。

A2.
你先看看這篇資料
http://www.csie.ntnu.edu.tw/~u91029/SequenceManipulation.html

A3.A4
等你學多一點再來討論吧,這需要很多前置的概念才能解釋
我們社課的投影片
http://forum.tfcis.org/thread-177-1-2.html

排序是我們高一上社課內容,圖論/線段樹是下學期/暑假的課程

作者: 林宇翔    時間: 2014-10-29 17:51
我是有報npsc
作者: 林宇翔    時間: 2014-10-29 18:01
另外這題這樣寫對嗎
2013 npsc A 新 烤餅乾
[C++] 純文本查看 復制代碼
#include<iostream>

using namespace std;
int main()
{
        //ios::sync_with_stdio(false);
        int t;
        for(int e=0,n[6],m[6];e<t;e++)
        {
                int num=0;
                for(int f=0;f<6;f++)
                {
                        cin>>n[f];
                }
                for(int f=0;f<6;f++)
                {
                        cin>>m[f];
                }
                for(int a=0,b=0;a<6;a++)
                {
                        for(int b=0;b<6;b++)
                        {
                                if(n[a]>m)
                                {
                                        num++;
                                }
                        }
                }
                cout<<num<<endl;
        }
        return 0;
}

作者: 林宇翔    時間: 2014-10-31 18:09
這兩個是什麼語法
1. Relax(m,t){
......
}
2. std :: cin >> cases ;
作者: 林宇翔    時間: 2014-11-4 16:56
第2個很清楚吧
作者: Sylveon    時間: 2014-11-4 19:24
學弟都不回QQ

還記得你打的
[C++] 純文本查看 復制代碼
using namespace std; 

這行嗎?

當初我們並沒有清楚解釋這一個東西。我們可以理解為:在這一行後的所使用的函數/物件都使用來自std這一個命名空間的版本。如果你沒有指明要用std的話,那你就要指明你所使用的來源,語法為

name::Object

也就是你問的
[C++] 純文本查看 復制代碼
std::cin



作者: 林宇翔    時間: 2014-11-4 21:08
回domen111
http://forum.tfcis.org/thread-177-1-2.html
中的
[C] 純文本查看 復制代碼
定義d[x]為由原點p到x已知路徑中的最短距離

Relax(m,t){
    if(d[t]>d[m]+w[m][t]){                 d[t]=d[m]+w[m][t]         }
}

如果d[t]存在另一路徑,由p至m再由m至t的路,其權值更小,則選擇較小值會更好

作者: 林宇翔    時間: 2014-11-9 16:58
請問要參加npsc要學會哪些演算法
作者: visitorIKC    時間: 2014-11-9 19:59
林宇翔 發表於 2014-11-9 16:58
請問要參加npsc要學會哪些演算法

LZN Tree,DMST,SBST,Heavy-Light Decompisition,BOGO sort,kD-Tree,FALSE,Brainf**k,whitespace,The second sorting,Travel_Saleman,etc...
XD*(10^517)




歡迎光臨 竹園論壇 (http://forum.tfcis.org/) Powered by Discuz! X3.2