YT14-HDU-找迴圈節 (關於std::ios::sync_with_stdio(false);的作用和疑問)
Problem Description
As a unicorn, the ability of using magic is the distinguishing feature among other kind of pony. Being familiar with composition and decomposition is the fundamental course for a young unicorn. Twilight Sparkle is interested in the decomposition of permutations. A permutation of a set S = {1, 2, ..., n} is a bijection from S to itself. In the great magician —— Cauchy's two-line notation, one lists the elements of set S in the first row, and then for each element, writes its image under the permutation below it in the second row. For instance, a permutation of set {1, 2, 3, 4, 5} σ can be written as:
Here σ(1) = 2, σ(2) = 5, σ(3) = 4, σ(4) = 3, and σ(5) = 1.
Twilight Sparkle is going to decompose the permutation into some disjoint cycles. For instance, the above permutation can be rewritten as:
Help Twilight Sparkle find the lexicographic smallest solution. (Only considering numbers).
Input
Input contains multiple test cases (less than 10). For each test case, the first line contains one number n (1<=n<=10^5). The second line contains n numbers which the i-th of them(start from 1) is σ(i).
Output
For each case, output the corresponding result.
Sample Input
5 2 5 4 3 1 3 1 2 3
Sample Output
(1 2 5)(3 4) (1)(2)(3)
原始碼如下:
#include <iostream>
#include <cstdio>
#include <cstring>
const int NUM=100000;
using namespace std;
int main()
{
int i,j,n,m;
int a[NUM];
while(cin>>n)
{
for(i=1; i<=n; i++)
cin>>a[i];
for(i=1; i<=n; i++)
{
while(a[i])
{
cout<<"("<<i;
j=a[i];
a[i]=0;
while(a[j])
{
cout<<" "<<j;
m=a[j];
a[j]=0;
j=m;
}
cout<<")";
}
}
cout<<endl;
}
return 0;
}
AC程式碼如下:
#include <iostream>
#include <cstdio>
#include <cstring>
const int NUM=100000;
using namespace std;
int main()
{
std::ios::sync_with_stdio(false);
int i,j,n,m;
int a[NUM];
while(cin>>n)
{
for(i=1; i<=n; i++)
cin>>a[i];
for(i=1; i<=n; i++)
{
while(a[i])
{
cout<<"("<<i;
j=a[i];
a[i]=0;
while(a[j])
{
cout<<" "<<j;
m=a[j];
a[j]=0;
j=m;
}
cout<<")";
}
}
cout<<endl;
}
return 0;
}
執行結果:
提交自己的程式碼之後經常是Time Limit Exceeded。
看網上找程式碼的時候別人用的通常都是C語言的scanf和printf輸入輸出,一直以為那是C語言的程式碼,但這次偶然看到了同學的程式碼(和我“抄”得居然是同一個。。。老師教導我們要”抄“之有道)但其用了
於是百度了一下:
cin,cout之所以效率低,是因為先把要輸出的東西存入緩衝區,再輸出,導致效率降低,而這段語句可以來打消iostream的輸入輸出快取,可以節省許多時間,使效率與scanf與printf相差無幾。
又學到了一手,最近做題總算出現時間超限,以後就不用擔心了。不過不知道
std::ios::sync_with_stdio(false);
有什麼弊端,
相關文章
- 有關JavaScript事件迴圈的若干疑問探究JavaScript事件
- 關於JS中for迴圈時,作用域問題和this指標指向的總結JS指標
- iOS 關於NSTimer的迴圈引用iOS
- for (auto it = _list.begin(); it != _list.end(); )關於在for迴圈中使用std::vector中的begin和end
- 關於字典和陣列的疑問陣列
- 關於一個迴圈請求與迴圈計時器的問題
- 關於原型模式的看法和疑問原型模式
- 關於TargetServiceFactoryVisitable的疑問
- 關於Proxy和Decorator設計模式的疑問設計模式
- 關於 dingo API 的疑問GoAPI
- 關於jdonframework框架的小疑問Framework框架
- 關於設計模式的疑問設計模式
- 關於非同步介面呼叫的疑問?非同步
- 關於no-wait latch 的疑問AI
- 關於論壇快取的疑問快取
- 關於JTA實現的疑問
- iOS迴圈引用iOS
- Java 關於迴圈的練習--和為n的正數序列Java
- JavaScript return false的作用JavaScriptFalse
- 關於技能技術企劃書的疑問和建議
- 注意for迴圈中變數的作用域變數
- 關於JS迴圈效率小實驗JS
- 如何在 iOS 中解決迴圈引用的問題iOS
- ios 避免迴圈引用iOS
- JavaScript 中 for in 迴圈和陣列的問題JavaScript陣列
- iOS | 用於解決迴圈引用的block timeriOSBloC
- MySQL關於資料字典的一個疑問MySql
- 有幾點關於C語言的疑問C語言
- 關於Multiple Buffer Pools的一些疑問
- 關於多執行緒協作的疑問執行緒
- QI4J中關於entity的疑問
- js跳出迴圈的方法區別( break, continue, return ) 及 $.each 的(return true 和 return false)...JSFalse
- 關於我對Spring迴圈依賴的思考Spring
- 關於面試題“ArrayList迴圈remove()要用Iterator”的研究面試題REM
- 關於例項變數和靜態變數的一點疑問變數
- 關於Oracle臨時表的使用的小經歷和一點疑問?Oracle
- 關於pl/sql中流程控制和迴圈的一些總結SQL
- 關於JDONJIVE中DbFilterManager中程式碼的疑問Filter