问题 - G - 代码强制 (codeforces.com)
给定击中的罐子,求最后的得分,每个罐子的得分为数字的平方,通过上图可以大概猜出,当前罐子被击中能影响到上面一层与当前罐子有公共边的罐子,假设当前罐子的位置是[i,j],
则受到影响的罐子有
[i-1,j-1],[i-1,j]
[i-2,j-2,],[i-2,j-1],[i-2,j],[i-2,j+1],[i-2,j+2]
....
10
9
1
2
3
4
5
6
10
1434
1000000
156
1
5
10
21
39
46
146
63145186
58116199242129511
#include <iostream>
#include <vector>
#include <bits/stdc++.h>
#include <unordered_map>
#include <unordered_set>
#include <queue>
#include <set>
#include <map>
#include <stack>
#include <algorithm>
#define x first
#define y second
#define pb emplace_back
#define fu(i,a,b) for(int i=a;i<=b; ++ i)
#define fd(i,a,b) for(int i=a;i>=b; -- i)
#define endl '\n'
#define ms(x,y) memset(x,y,sizeof x)
#define ios ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;
typedef vector<vector<LL>> VVL;
typedef vector<vector<int>> VVI;
typedef vector<LL> VL;
typedef vector<bool> VB;
typedef vector<int> VI;
typedef vector<string> VS;
typedef pair<int,int> PII;
typedef vector<PII> VPII;
typedef pair<PII,int> PIII;
typedef pair<double,double> PDD;
typedef pair<double,int> PDI;
typedef pair<char,int> PCI;
typedef pair<string,int> PSI;
typedef pair<int,string> PIS;
typedef pair<int,char> PIC;
typedef pair<LL,LL> PLL;
typedef __int128 i128;
typedef unsigned long long ULL;
const int N = 1e6 + 10 ,M =100,INF = 0x3f3f3f3f,P = 131;
const double eps = 1e-8,DNF = 1e18;
const int mod = 998244353 ,base= 20010;
const LL LNF=(LL) INF * INF;
LL get(LL n)
{
return n * (n + 1) * (2 * n + 1 ) / 6 ;
}
LL get(LL l,LL r )
{
return get(r) - get(l - 1 );
}
void solve()
{
int n;cin >> n ;
int x =1 ;
while(x * (x + 1) /2 < n ) x ++ ;
int y = n - x * (x- 1)/ 2 ;
// y : 当前这个数 在 所在行的位置
LL ans =0 ;
fu(i,1,x)
{
int l= max(1,y - (x - i));
// 从 y这个位置 往上一层 左边界就可以 往左移一格 ,到当前第i行的左边界在1 和 原本能到的左边界取最大值 ,防止越界
int r = min(i,y);
// i 是当前这一行 最多能容纳的数的数量
ans += get(i*(i-1)/2+l,i*(i - 1) / 2 + r ) ;
// 一段数的平方和
}
cout << ans <<endl;
}
signed main()
{
// freopen("1.txt","r",stdin);
// #define int long long
// init(N-1);
ios
// cout << fixed<<setprecision(2);
int t=1;
cin>>t;
int now = 1;
while(t -- )
{
// cout<<"Case ";
// cout<<"Case #";
// cout<<"Scenario #";
// cout<< now ++ <<": ";
// cout<< now ++ <<": \n";
solve();
}
return 0;
}