二次函数的顶点式为
f(x)=a(x−h)2+k,其中顶点为 (h,k),顶点处的函数值即 k。
若取最简单的 h=0,则顶点在 x=0。把顶点式展开并与一般式对比可得:
因此选取
a=1,b=0,c=s即可满足要求:顶点在 x=0,顶点值为 f(0)=s,且 a=0,并且数值范围也满足约束(1,0,s 均在 [−2⋅109,2⋅109] 内)。
对每个输入的 s,直接输出三元组:
1 0 s
对每组数据仅常数时间输出一次,时间复杂度 O(T),空间复杂度 O(1)。
import sys
def main():
data = sys.stdin.read().strip().split()
if not data:
return
t = int(data[0]) # 组数
out = []
# 从第二个数字开始就是每组的 s
for i in range(1, t + 1):
s = int(data[i])
# 关键构造:顶点在 0,顶点值为 s
out.append(f"1 0 {s}")
sys.stdout.write("\n".join(out))
if __name__ == "__main__":
main()
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String line = br.readLine();
if (line == null || line.trim().isEmpty()) {
System.out.print("");
return;
}
int T = Integer.parseInt(line.trim()); // 读入组数
for (int i = 0; i < T; i++) {
// 逐行读取 s(允许空格/多空格)
String sLine = br.readLine();
while (sLine != null && sLine.trim().isEmpty()) {
sLine = br.readLine(); // 跳过空行
}
int s = Integer.parseInt(sLine.trim());
// 关键构造:a=1, b=0, c=s
sb.append("1 0 ").append(s).append('\n');
}
System.out.print(sb.toString());
}
}
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
if (!(cin >> T)) return 0; // 读取组数
while (T--) {
long long s;
cin >> s; // 读取 s
// 关键构造:顶点在 0,顶点值为 s
cout << 1 << ' ' << 0 << ' ' << s << '\n';
}
return 0;
}
给定一个正整数 s ,请构造一个二次函数:
f(x)=ax2+bx+c
使得该函数的顶点处的数值等于 s 。要求 a=0 。
第一行一个整数 T(1≤T≤104) ,表示数据组数。
接下来 T 行,每行一个正整数 s(1≤s≤109) 。
对于每组数据,输出一行,包含三个整数 a,b,c,表示所构造的二次函数。
要求:−2×109≤a,b,c≤2×109 ,且 a=0 。
输入
2
1
10
输出
1 0 1
1 0 10