牛客IOI周赛27-普及组 B 小H的数列
题意:
给定数列递推公式和 n ,求第 n 项的值。
思路:
(数学fw一个,手推没啥好说的) 纯数学题,手推后 不难 发现
a
n
=
n
2
a_n=n^2
an=n2,注意到 n 极大,套高精公式解决。
代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
#include<vector>
#include<math.h>
#include<queue>
using namespace std;
typedef long long ll;
typedef double dd;
typedef pair<int, int> pii;
typedef pair<dd, dd> pdd;
const int MAXN = 310;
const int inf = 1e9 + 7;
const int MAXM = 8000010;
char s[200000];
int a[210000];
int b[210000];
int main()
{
cin >> s;
int n = strlen(s);
for (int i = 0;i < n;i++) a[i + 1] = s[n - i - 1] - '0';
for (int i = 1;i <= n;i++)
{
for (int j = 1;j <= n;j++)
{
b[i + j - 1] += a[i] * a[j];
}
}
int now = 1;
while (now <= 2 * n - 1 || b[now] > 10)
{
if (b[now] >= 10)
{
b[now + 1] += b[now] / 10;
b[now] %= 10;
}
now++;
}
int flag = 0;
for (int i = now;i >= 1;i--)
{
if (b[i] == 0 && !flag) continue;
printf("%d", b[i]), flag = 1;
}
if (!flag) printf("0");
}