线段数
内存限制: 512 Mb
时间限制: 1000 ms
题目描述
给定数组 a=[a1,a2,⋯,an],Eve 可以执行任意次(可能 0 次)以下操作:
- 选择 1≤i≤n,令 ai←ai+1。
Eve 希望最终数组中任意三个相邻元素之和都是 3 的倍数。
请求出需要达成目标所需的最小操作次数。
输入格式
第一行一个整数 n。
第二行 n 个整数 a1,⋯,an。
输出格式
一行一个整数表示答案。
数据范围
对于 30% 的数据,3≤n≤5。
对于 60% 的数据,3≤n≤1000。
对于 100% 的数据,3≤n≤10^5,1≤ai≤10^9。
这道题用到枚举
代码:
#include<bits/stdc++.h> using namespace std; long long n,a[100010],num[100010],vis[100010],cnt=0,ma=100000000; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=0;i<9;i++){ long long l=i%3,r=i/3; vis[1]=l,vis[2]=r; cnt=l+r; for(int j=3;j<=n;j++){ long long ans=a[j]+a[j-1]+a[j-2]+vis[j-1]+vis[j-2]; ans%=3; if(ans%3){ vis[j]=3-ans%3; cnt+=vis[j]; // a[j]+=3-ans%3; }else vis[j]=0; } ma=min(cnt,ma); } cout<<ma; return 0; }