百度不收录网站描述,天津建设工程信息网怎么报名的,腾讯云wordpress升级慢,网站首页模板下载题面
分析
观察指针移动的性质#xff0c;可以发现每一段都是从起点走到终点#xff0c;在原路返回#xff0c;这样每一段也就表示#xff0c;在起点处加一#xff0c;在终点处减一#xff0c;形成了很明显的差分结构#xff0c;思考能否构造出a数组的关键就是他的前缀…题面
分析
观察指针移动的性质可以发现每一段都是从起点走到终点在原路返回这样每一段也就表示在起点处加一在终点处减一形成了很明显的差分结构思考能否构造出a数组的关键就是他的前缀和数组b的b[n]必须等于0并且每一个 b i b_i bi都不能小于0因为起点大于0终点小于0所有数都应该是大于等于0的在某一个下标一旦前缀和数组元素等于0代表开始原路返回这是走过最长的一段那么后面所有的前缀和元素都必须是0.
代码
#include bits/stdc.husing namespace std;
using ll long long;void solve() {int n;cin n;vectorll a(n 1);for(int i 1; i n; i ) {cin a[i];a[i] a[i - 1];}if(a[n] ! 0) {cout No\n;return ;}int flag 0;for(int i 1; i n; i ) {if(a[i] 0) {flag 1;break;}}int cnt 0;for(int i 1; i n; i ) {if(a[i] 0) cnt 1;else {if(cnt 1) {flag 1;break;}}}if(flag 1) cout No\n;else cout Yes\n;
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int T;cin T;while(T --) {solve();}
}