我发现csp的题目都特别长 跟小作文似的
然后本地通过了但是放到系统里面就会被判定零分
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int main() {
int Q[10][10];
int M0[10][10], M1[10][10];
double M2[10][10];
int n, t;
int count = 0;
//量化矩阵Q,初始化M
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
cin >> Q[i][j];
M0[i][j] = 0;
M1[i][j] = 0;
}
}
cin >> n >> t;
//读入数据
for (int k = 0; k <= 14; k++) {
if (count > n) break;
for (int i = 0; k - i >= 0&&count<n; i++) {
if (k % 2 == 0) {
cin >> M0[k - i][i];
count++;
}
else {
cin >> M0[i][k - i];
count++;
}
}
}
//乘以量化矩阵
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
M1[i][j] = Q[i][j] * M0[i][j];
}
}
//离散余弦逆变换
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
M2[i][j] = 0.0;
for (int u = 0; u <=7; u++) {
for (int v = 0; v <= 7; v++) {
if (u == 0 && v == 0)
M2[i][j] += (double)M1[u][v] * cos(0) * cos(0) / 2.0;
else if (u == 0)
M2[i][j] += (double)M1[u][v] * sqrt(0.5) * cos(acos(-1) * (i + 0.5) * double(u)/8.0) * cos(acos(-1) * (j + 0.5) * double(v) / 8.0);
else if(v==0)
M2[i][j] += (double) M1[u][v] * sqrt(0.5)* cos(acos(-1) * (i + 0.5) * double(u) / 8.0) * cos(acos(-1) * (j + 0.5) * double(v) / 8.0);
else
M2[i][j] += M1[u][v] * cos(acos(-1) * (i + 0.5) * double(u) / 8.0) * cos(acos(-1) * (j + 0.5) * double(v) / 8.0);
}
}
M2[i][j] = M2[i][j] / 4.0;
M2[i][j] = round(M2[i][j] +128);
if (M2[i][j] > 255) {
M2[i][j] = 255;
}
else if (M2[i][j] < 0) {
M2[i][j] = 0;
}
}
}
//输出
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if(t==2) cout << M2[i][j] << " ";
if(t==1) cout << M1[i][j] << " ";
if(t==0) cout << M0[i][j] << " ";
}
cout << endl;
}
return 0;
}
不清楚为什么判定零分,但本地就是对的