NC205087. 牛妹爱数列
描述
牛妹正在玩一个数列
输入描述
第一行,输入一个数n。第二行,输入n个数,第i个数表示。
输出描述
输出最小翻转次数。
示例1
输入:
10 1 0 1 1 0 0 0 1 0 0
输出:
3
说明:
样例解释: 第一次使用(1)操作, 把2改掉: 1 1 1 1 0 0 0 1 0 0 第二次使用(2)操作, 把1-4全部改掉: 0 0 0 0 0 0 0 1 0 0 第三次使用(1)操作, 把8改掉: 0 0 0 0 0 0 0 0 0 0
C++14(g++5.4) 解法, 执行用时: 11ms, 内存消耗: 1016K, 提交时间: 2020-08-14 20:26:39
#include <bits/stdc++.h> using namespace std; int main(){ int dp[100005][2]; int n; cin>>n; dp[0][0]=dp[0][1]=0; for(int i=1;i<=n;i++) { int x; scanf("%d",&x); dp[i][x]=min(dp[i-1][x],dp[i-1][!x]+1); dp[i][!x]=min(dp[i-1][!x]+1,dp[i-1][x]+2); } cout<<min(dp[n][0],dp[n][1]+1)<<endl; return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 21ms, 内存消耗: 760K, 提交时间: 2020-08-28 18:04:17
#include<bits/stdc++.h> using namespace std; int n,a[100005],t,s; int main() { cin>>n; for(int i=0;i<n;i++)cin>>a[i]; for(int i=n-1;i>=0;i--) if((a[i]+t)%2==1){ if(a[i-1]==a[i]) t++; s++; } cout<<s; }
C(clang 3.9) 解法, 执行用时: 8ms, 内存消耗: 868K, 提交时间: 2020-08-28 18:09:36
#include<stdio.h> int n,a[100005],t,s,i; int main(){scanf("%d",&n);for(i=1;i<=n;i++)scanf("%d",&a[i]);for(i=n;i>0;i--)if((a[i]+t)%2==1){if(a[i-1]==a[i])t++;s++;}printf("%d",s);}