# Array# Output Generation# Simple Math

c676 - 大家來出題 { 1: 簡易加法 }

🔗 前往 ZeroJudge 原題

題目描述

題目要求生成 100 組測試資料,每組包含兩個介於 0 到 10^6 之間的整數,以及它們的和。程式需要將這些資料輸出,格式為 "n1 n2 ans",每組資料佔一行。

解題思路

題目本身是一個輸出生成問題。程式碼預先定義了一個包含 200 個元素的陣列 a,其中 a[2i]a[2i+1] 構成一組輸入數字和對應的答案。程式迴圈遍歷這個陣列,將每組數字和答案以指定的格式輸出。由於陣列 a 已經預先計算好,程式只需要簡單地輸出陣列中的元素即可。

複雜度分析

  • 時間複雜度: O(N),其中 N 是陣列的大小 (200)。迴圈遍歷陣列一次。
  • 空間複雜度: O(1),程式只使用了固定大小的陣列和幾個變數,空間使用不隨輸入大小變化。

程式碼

#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include <stdio.h>
int a[201]={1,2,2,4,3,6,4,8,5,10,6,12,7,14,8,16,9,18,10,20,11,22,12,24,13,26,14,28,15,30,16,32,17,34,18,36,19,38,20,40,21,42,22,44,23,46,24,48,25,50,26,52,27,54,28,56,29,58,30,60,31,62,32,64,33,66,34,68,35,70,36,72,37,74,38,76,39,78,40,80,41,82,42,84,43,86,44,88,45,90,46,92,47,94,48,96,49,98,50,100,51,102,52,104,53,106,54,108,55,110,56,112,57,114,58,116,59,118,60,120,61,122,62,124,63,126,64,128,65,130,66,132,67,134,68,136,69,138,70,140,71,142,72,144,73,146,74,148,75,150,76,152,77,154,78,156,79,158,80,160,81,162,82,164,83,166,84,168,85,170,86,172,87,174,88,176,89,178,90,180,91,182,92,184,93,186,94,188,95,190,96,192,97,194,98,196,99,198,100,200};
inline void write(int x) {
	int stk[3],*ptr(&stk[0]);
	while(x){*ptr=x%10;x/=10;++ptr;}
	while(--ptr>=(&stk[0])){putchar_unlocked(*ptr+'0');}
}
int main(){
	for(int i=0;i<200;i+=2){
		write(a[i]);
		putchar_unlocked(' ');
		write(a[i]);
		putchar_unlocked(' ');
		write(a[i+1]);
		putchar_unlocked('\n');
	}
}

Discussion