题目链接:点击打开链接
打一下表就能找到规律了。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
const int N = 10010 + 2;
inline void rd(int &n){
n = 0;
char c = getchar();
while(c < '0' || c > '9') c = getchar();
while(c >= '0' && c <= '9') n *= 10, n += (c - '0'),c = getchar();
}
int a[N];
int solve(int x){
int ans = 0;
for(int i = 1; i <= x; i++)
{
if(i+i+i>x)break;
for(int j = i; j <= x; j++)
{
int z = x - i- j;
if(z<j)break;
if (i + j > z) {
if(j==z || i==j)ans++;
else ans += 2;
}
}
}
return ans;
}
int main(){
// freopen("output.txt","w+",stdout);
/*
for(int i = 3; i < N; i++)
a[i] = solve(i);
printf("a[%d]={",N);
for(int i = 3; i < N; i++)
printf("%d,", a[i]);
puts("}");
for (int i = 6; i < N; i += 2)
printf("%d\n", a[i] - a[i - 2]);
*/
a[3] = 1;
a[4] = 0;
a[5] = 1;
a[6] = 1;
int idx = 0, idy = 0;
for (int i = 3; i + 2 < N; i += 2) {
a[i + 2] = a[i] + idx;
++ idx;
++ idy;
if (idy == 3) {
idx -= 2;
idy = 0;
}
}
idx = idy = 0;
for (int i = 6; i + 2 < N; i += 2) {
a[i + 2] = a[i] + idx;
++ idx;
++ idy;
if (idy == 3) {
idx -= 2;
idy = 0;
}
}
int cas, x;
scanf("%d", &cas);
while (cas -- >0) {
scanf("%d",&x);
printf("%d ", x);
scanf("%d",&x);
printf("%d\n", a[x]);
}
return 0;
}
/*
*/