關於藍橋杯競賽的一些小問題。(備賽 and 參賽)

最基礎 的開始吧:
比如輸入啥的, 那好吧,就輸入了。(簡單放一點在這裏)。
但是在輸入之前, 先列舉以下寫代碼的框架。(很low反正你們都知道qwq

// 這是寫代碼的模板, 請你開始寫代碼第一件事就是將下面寫出來
#include<stdio.h>
#include<bits/stdc++.h>// 萬能頭文件, 藍橋杯是支持的。可以用。
// 這裏添加變量
// 這裏後面可以添加函數
int main(){
	// 這裏寫代碼。。。。。
	return 0;// 注意要return 0;
}

好了開始輸入

對於輸入來說 比如題目 :
第一行輸入一個數 N ,接下來一行 ( 或者 N 行,每行一個數字 ) 。
接下來是數據範圍(題目會給,一般在題目最後, 題目中或許會隱含有範圍要注意)。
對於10%的數據 0 <= N <= 100
對於30%的數據 0 <= N <= 1000
對於100%的數據 0 <= N <= 50000

那麼 請仔細看 註釋註釋
下面開始正式寫代碼。

#include<bits/stdc++.h>
int MAX = 50005;// 這裏是50000 + 5  也就是100%的數據範圍 + 5, 定義在這裏
int N = 0; // 這樣的數據定義爲全局變量方便使用。
int num[MAX] = {};// 定義一個數組存放數據  
// 用MAX做爲數組長度
// = {};  是初始化數組數據爲0;
int main(){
	// 對於輸入一律用scanf, 不管是字符串還是啥。(~~當然還有快讀,但是藍橋杯用不到~~ )
	scanf("%d", &N);// 輸入N ~~記得取址符號~~ 
	for(int i = 0; i < N; ++i){// 最簡單的循環
		scanf("%d", num + i);// 輸入N行數據
	}// 輸入結束
	return 0;// 注意要return 0;
}

end
好了輸入差不多就這樣, 我一時也想不起來。

輸出:

這裏接着上面的題目寫。
題目:
你需要輸出這 N 個數的逆序對的個數。(就是輸出一個數)。
接着上面的程序繼續。

#include<bits/stdc++.h>
int MAX = 50005; 
int N = 0;  
int num[MAX] = {}; 

/////////
int answer = 0;// 根據題目要求新增一個變量, 用來記錄答案,
// 如果答案是一串數字需要用數組。
/////////
 
int main(){
	scanf("%d", &N); 
	for(int i = 0; i < N; ++i){ 
		scanf("%d", num + i); 
	}// 輸入結束
	
	// 假設你已經計算完結果

	// 那麼這裏可以開始輸出
	printf("%d\n", answer);// 注意格式(格式不對可能沒分),後面一般要跟一個換行符, 就是輸出最後一行後要換行。 
	
	return 0; 
}

end
輸出好像也沒啥好說的, 可能遇到了纔想得起來。就這樣吧。

雜項

這裏是藍橋杯官網得截圖:
主要主要主函數return 0;
輸入/出 long long數據需要使用的是

long long x = 0;
scanf("%I64d", &x);
printf("%I64d", x);

對於數組來說, 靜態申請的一維數組最大長度大概爲:

int num[500000000]; // int 可申請5*10的8次方左右
long long num[200000000]; // long long 可申請2*10的8次方左右

數據的範圍:
需要根據不同的取值範圍,確定使用不同的數據類型。當超過20位的數據就要考慮其餘的解法,或者自己寫大數的運算了(這是我最不想遇到的)。

unsigned int 0~4294967295 // 9及以下位數都可裝
int -2147483648~2147483647 // 9及以下位數都可裝
unsigned long 0~4294967295 // 9及以下位數都可裝
long -2147483648~2147483647 // 9及以下位數都可裝
long long的最大值:9223372036854775807 // 18及以下位數都可裝 19位也差不多
long long的最小值:-9223372036854775808 // 18及以下位數都可裝 19位也差不多
unsigned long long的最大值:18446744073709551615 //20位
// 下面用的可能沒有接觸過, 但存在, 有上面的就夠了, 下面和上面的long long 是一樣的。
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615

在這裏插入圖片描述
當然還有藍橋杯的最大棧空間是256MB。下面爲截圖。
在這裏插入圖片描述

一些簡單的優化問題 * 不涉及算法(可能大家都知道)


1. 
// 當需要多次使用一個表達式的值的時候, 可以存起來。 這樣可以減少計算次數。
// 如:
int n = 10;
int b = 30;
for(int i = 0; i < n; i++){
	printf("%d", n * b * i);
}
// 更改爲
int n  = 10;
int b = 30;
int t = n * b;
for(int i = 0; i < n; i++){
	printf("%d", t * i);
}
// 如:
// 計算一個數組 / 或者字符串長度的時候, 最後一直存着,以免多次計算。 

2. 
// 位運算符的應用
// 如:
int n = 30;
int i =  n* 2;
int c =  n / 16;
// 可以更改爲
int i = n << 1; // 相信我會快。
int c =  n >> 4;

// 如:
int i = 100;
while(i % 2 == 1){// 對於for循環同樣使用。
i--;
}
// 改爲
while(i & 1){ // 用位運算代替
--i;// 前自減/增 比 後自減/增快。
}

// 如:
int i = 0;
int x = i--;
// 改爲
int x = i;
--i;// 這樣結果一樣, 但編譯後,會少一條彙編指令。

end
暫時就這樣吧,想不太多了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章