NC207421. 减成一
描述
输入描述
输入t,代表有t组数据。每组数据输入n,代表有n个数。接下来一行输入n个数,数字大小小于1e6。(t<=1000,n<1e5,∑n < 1e6)
输出描述
每组数据输出一个整数代表最少需要操作的次数。
示例1
输入:
1 6 1 3 5 2 7 1
输出:
9
C(clang 3.9) 解法, 执行用时: 138ms, 内存消耗: 476K, 提交时间: 2020-05-31 14:35:32
#include "stdio.h" main() { int t,n,i,j,a[100005],s,v; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } s=0; a[n]=1; for(i=1;i<n+1;i++) { if(a[i]<a[i-1]) { s+=a[i-1]-1; if(a[i]>1) s-=a[i]-1; } } printf("%d\n",s); } }
C++14(g++5.4) 解法, 执行用时: 311ms, 内存消耗: 860K, 提交时间: 2020-05-31 22:08:19
#include<bits/stdc++.h> using namespace std; int t, n, a[123456]; int main() { for(cin >> t; t--; ) { cin >> n; a[0] = 1; int ans = 0; for(int i = 1; i <= n; i++) { cin >> a[i]; ans += max(a[i]-a[i-1], 0); } cout << ans << endl; } }
C++11(clang++ 3.9) 解法, 执行用时: 313ms, 内存消耗: 488K, 提交时间: 2020-05-31 15:51:05
#include<bits/stdc++.h> using namespace std; int a[100005]; int main(){ int t,n,k=1; cin>>t; while(t--){ int ans=0; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; ans+=a[i]-a[i-1]>0?a[i]-a[i-1]:0; } cout<<--ans<<endl; } return 0; }