题意:
一台计算机只能显示n位;现在我们输入一个数字k;计算机会进行运算,每次平方,然后只保留前n位;
例如1 6;就是只能显示1位;第一次显示6;6*6=36,第二次显示3,3*3=9;第三次显示9;第四次显示8,第五次显示6(已循环);
问出现的最大的数字是多少;
思路:
算到后面肯定是会循环的,我们只要模拟计算,然后找出循环之前出现过的最大的数字就行了;
我这了用map记录之前是否出现过,来判断是否开始循环了;
#include<cstdio>
#include<cstring>
const int N = 100005;
int seq[N], sum[N], n, s;
int main() {
while(scanf("%d%d",&n,&s) != EOF) {
sum[0] = 0;
for(int i = 1; i <= n; i++) {
scanf("%d",&seq[i]);
sum[i] = sum[i - 1] + seq[i];
}
int ans = n + 1;
int cur = 1;
bool ok = false;
for(int i = 1; i <= n; i++) {
if(sum[i] - sum[cur - 1] < s)
continue;
while(sum[i] - sum[cur] >= s)
cur++;
ans = ans < i - cur + 1 ? ans : i- cur + 1;
}
printf("%d\n",ans == n + 1 ? 0 : ans);
}
}