#15029: TLE~~~


Aaaaaaaaaaaaa (羅傑)

學校 : 臺北市立大同高級中學
編號 : 69102
來源 : [111.235.208.242]
最後登入時間 :
2023-09-13 09:02:41
d420. 00694 - The Collatz Sequence -- UVa694 | From: [203.72.178.252] | 發表日期 : 2018-09-05 17:23

#include <bits/stdc++.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
int A,L,sum=0;
ios::sync_with_stdio(false);
while(1){
for(int i=1; ; i++){
scanf("%d %d",&A,&L);
cout<<"Case "<<i<<": A = ";
if(L<0 || A<0) break;
for(sum=1; ; sum++){
if(A==1) continue;
else if(A%2==0) A=A/2;
else A=A*3+1;
}
cout<<A<<", limit = "<<L<<", number of terms = "<<sum<<endl;

}
}
return 0;
}

嗚嗚~他欺負我

 
#15548: Re:TLE~~~


314159265358979323846264338327 ... (少年π)

學校 : 臺北市私立延平高級中學
編號 : 69058
來源 : [223.136.179.30]
最後登入時間 :
2024-04-29 19:11:35
d420. 00694 - The Collatz Sequence -- UVa694 | From: [114.137.36.223] | 發表日期 : 2018-10-13 17:49

#include <bits/stdc++.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
int A,L,sum=0;
ios::sync_with_stdio(false);
while(1){
for(int i=1; ; i++){
scanf("%d %d",&A,&L);
cout<<"Case "<<i<<": A = ";
if(L for(sum=1; ; sum++){
if(A==1) continue;
else if(A%2==0) A=A/2;
else A=A*3+1;
}
cout<<A<<", limit = "<<L<<", number of terms = "<<sum<<endl;

}
}
return 0;
}

嗚嗚~他欺負我

用了ios::sync_with_stdio(0);就不能再用scanf輸入啊!


 
#15551: Re:TLE~~~


OwO310659 (OwO)

學校 : 新北市立板橋高級中學
編號 : 58647
來源 : [118.150.111.60]
最後登入時間 :
2024-04-25 01:16:40
d420. 00694 - The Collatz Sequence -- UVa694 | From: [106.105.27.148] | 發表日期 : 2018-10-13 19:24

樓上提到使用了 ios::sync_with_stdio(false); 之後不能使用 scanf() 是有誤的,
正確來說是使用了之後cin/cout不能與C原有的stdin/stdout(EX: scanf()/printf(), getchar()/putchar())做混用,
以下簡單說一下:

C++的cin/cout為了避免與C原有的stdin/stdout衝突所以必須與stdin/stdout做同步,
此同步的過程會額外產生運算導致效能下降,
ios::sync_with_stdio(false); 則是關閉與stdin/stdout做同步的功能,
所以混用的話會導致 輸入/輸出 有不可預期的狀況產生,
通常會是不可預期的輸入導致演算法RE或TLE、算出錯誤的結果造成WA, 或者是不可預期的輸出造成WA。

總結來說,
使用了 ios::sync_with_stdio(false); 是可以使用 scanf()/printf() 的,
只是不能與 cin/cout 做混用而已,
不過這樣就失去使用 ios::sync_with_stdio(false); 的意義就是了~

 

另外,
你的程式會TLE的主要問題在於break,
由於break只會跳出一層迴圈,
以你的程式該break只會跳出第9行的 for(int i=1; ; i++) ,
而再上一層的while(1)並不會跳出,
所以你的程式還會繼續運行而導致TLE~

 

大致上就是這樣~
希望有幫助到你~ OwO

 
#15553: Re:TLE~~~


314159265358979323846264338327 ... (少年π)

學校 : 臺北市私立延平高級中學
編號 : 69058
來源 : [223.136.179.30]
最後登入時間 :
2024-04-29 19:11:35
d420. 00694 - The Collatz Sequence -- UVa694 | From: [114.137.36.223] | 發表日期 : 2018-10-13 20:14

樓上提到使用了 ios::sync_with_stdio(false); 之後不能使用 scanf() 是有誤的,
正確來說是使用了之後cin/cout不能與C原有的stdin/stdout(EX: scanf()/printf(), getchar()/putchar())做混用,
以下簡單說一下:

C++的cin/cout為了避免與C原有的stdin/stdout衝突所以必須與stdin/stdout做同步,
此同步的過程會額外產生運算導致效能下降,
ios::sync_with_stdio(false); 則是關閉與stdin/stdout做同步的功能,
所以混用的話會導致 輸入/輸出 有不可預期的狀況產生,
通常會是不可預期的輸入導致演算法RE或TLE、算出錯誤的結果造成WA, 或者是不可預期的輸出造成WA。

總結來說,
使用了 ios::sync_with_stdio(false); 是可以使用 scanf()/printf() 的,
只是不能與 cin/cout 做混用而已,
不過這樣就失去使用 ios::sync_with_stdio(false); 的意義就是了~

 

另外,
你的程式會TLE的主要問題在於break,
由於break只會跳出一層迴圈,
以你的程式該break只會跳出第9行的 for(int i=1; ; i++) ,
而再上一層的while(1)並不會跳出,
所以你的程式還會繼續運行而導致TLE~

 

大致上就是這樣~
希望有幫助到你~ OwO

感謝糾正觀念!


 
#16039: Re:TLE~~~


Aaaaaaaaaaaaa (羅傑)

學校 : 臺北市立大同高級中學
編號 : 69102
來源 : [111.235.208.242]
最後登入時間 :
2023-09-13 09:02:41
d420. 00694 - The Collatz Sequence -- UVa694 | From: [203.72.178.252] | 發表日期 : 2018-11-14 17:39

樓上提到使用了 ios::sync_with_stdio(false); 之後不能使用 scanf() 是有誤的,
正確來說是使用了之後cin/cout不能與C原有的stdin/stdout(EX: scanf()/printf(), getchar()/putchar())做混用,
以下簡單說一下:

C++的cin/cout為了避免與C原有的stdin/stdout衝突所以必須與stdin/stdout做同步,
此同步的過程會額外產生運算導致效能下降,
ios::sync_with_stdio(false); 則是關閉與stdin/stdout做同步的功能,
所以混用的話會導致 輸入/輸出 有不可預期的狀況產生,
通常會是不可預期的輸入導致演算法RE或TLE、算出錯誤的結果造成WA, 或者是不可預期的輸出造成WA。

總結來說,
使用了 ios::sync_with_stdio(false); 是可以使用 scanf()/printf() 的,
只是不能與 cin/cout 做混用而已,
不過這樣就失去使用 ios::sync_with_stdio(false); 的意義就是了~

 

另外,
你的程式會TLE的主要問題在於break,
由於break只會跳出一層迴圈,
以你的程式該break只會跳出第9行的 for(int i=1; ; i++) ,
而再上一層的while(1)並不會跳出,
所以你的程式還會繼續運行而導致TLE~

 

大致上就是這樣~
希望有幫助到你~ OwO

感謝糾正thanks

 



 
#16103: Re:TLE~~~


GHot_Taiwan (306-22 洪堂貴)

學校 : 臺北市私立延平高級中學
編號 : 69703
來源 : [1.200.64.192]
最後登入時間 :
2023-03-28 13:17:43
d420. 00694 - The Collatz Sequence -- UVa694 | From: [203.72.178.252] | 發表日期 : 2018-11-21 17:05

That's so easy.

#include <bits/stdc++.h>

using namespace std;

int main(){
	long long int a,b,k,t,n=1;
	while(cin>>a>>b){
			if(a<0&&b<0)return 0;
			k=a;
			t=b;
		
			long long int sum=1;
			while(a!=1){
				if(a>b){
					sum--;
				break;	
				}
				if(a%2!=0) {
					sum+=1;
					a=3*a+1;
				}
				else {
				sum+=1;
				a/=2;
				}
			}
			
		
		cout<<"Case "<<n<<": A = "<<k<<", limit = "<<t<<", number of terms = "<<sum<<endl;
		n++;
	}
	
	return 0;



 
#16108: Re:TLE~~~


314159265358979323846264338327 ... (少年π)

學校 : 臺北市私立延平高級中學
編號 : 69058
來源 : [223.136.179.30]
最後登入時間 :
2024-04-29 19:11:35
d420. 00694 - The Collatz Sequence -- UVa694 | From: [203.72.178.252] | 發表日期 : 2018-11-21 17:55

That's so easy.

#include <bits/stdc++.h>

using namespace std;

int main(){
	long long int a,b,k,t,n=1;
	while(cin>>a>>b){
			if(a<0&&b<0)return 0;
			k=a;
			t=b;
		
			long long int sum=1;
			while(a!=1){
				if(a>b){
					sum--;
				break;	
				}
				if(a%2!=0) {
					sum+=1;
					a=3*a+1;
				}
				else {
				sum+=1;
				a/=2;
				}
			}
			
		
		cout<<"Case "<<n<<": A = "<<k<<", limit = "<<t<<", number of terms = "<<sum<<endl;
		n++;
	}
	
	return 0;



可以挑戰一下寫到0ms才比較有挑戰性
學會優化也很重要

 
ZeroJudge Forum