题
给定一个浮点数 n,求它的三次方根。
790 数的三次方根 - 浮点数二分
输入格式
共一行,包含一个浮点数 n。
输出格式
共一行,包含一个浮点数,表示问题的解。
注意,结果保留 6 位小数。
数据范围
−10000≤n≤10000
输入样例:
1000.00
输出样例:
10.000000
#include<bits/stdc++.h>
using namespace std;
int main(){
double x;cin>>x;
double l=-10000,r=10000;
while(r-l>1e-8){//-7的话可能四舍五入不对,比有效数多两位保险
double mid=(r+l)/2;
if(mid*mid*mid>=x)r=mid;
else l=mid;
}
printf("%.6f",r);
}
796 子矩阵的和 - 前缀和
题目描述
输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。
对于每个询问输出子矩阵中所有数的和。
输入格式
第一行包含三个整数 n,m,q。
接下来 n 行,每行包含 m 个整数,表示整数矩阵。
接下来 q 行,每行包含四个整数 x1,y1,x2,y2,表示一组询问。
输出格式
共 q 行,每行输出一个询问的结果。
数据范围
1≤n,m≤1000,
1≤q≤200000,
1≤x1≤x2≤n,
1≤y1≤y2≤m,
-1000≤矩阵内元素的值≤1000
输入样例:
3 4 3
1 7 2 4
3 6 2 8
2 1 2 3
1 1 2 2
2 1 3 4
1 3 3 4
输出样例:
17
27
21
解 - 前缀和
#include <iostream>
using namespace std;
const int N = 1010; // 设置矩阵最大大小
int a[N][N], s[N][N]; // a:原始矩阵,s:a的前缀和矩阵
int main()
{
int n, m, q;
cin >> n >> m >> q;
for (int i = 1; i <= n; ++i) // 从下标1开始,避免边界问题
for (int j = 1; j <= n; ++j)
{
cin >> a[i][j];
// 前缀和计算
s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];
}
// 查询
while (q--)
{
int x1, y1, x2, y2; // 查询的子矩阵左上右下坐标
cin >> x1 >> y1 >>