NC231997. 有趣的区间
描述
给出一个长度为 的数组 ,下标从 开始,。定义一个区间 是“有趣的区间”,当且仅当 结果为奇数。
表示 按位或 (按位或运算符“”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的两个二进位有一个为 时,结果位就为 )。
求“有趣的区间”的个数,两个区间 相同,当且仅当 且 。
输入描述
第一行包含一个整数 ,表示数组 的长度。
第二行包含 个整数,分别表示数组 的 个元素,其中 。
输出描述
一行包含一个整数,表示 ”有趣的区间“ 的个数。
示例1
输入:
2 2 1
输出:
2
说明:
”有趣的区间“ 有
是奇数
是奇数
共 个。
C++ 解法, 执行用时: 206ms, 内存消耗: 504K, 提交时间: 2022-01-14 19:44:04
#include<bits/stdc++.h> using namespace std; int n; long long int ans=0,x,l; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>x; if(x&1) l=i; ans+=l; } cout<<ans; return 0; }
C 解法, 执行用时: 84ms, 内存消耗: 356K, 提交时间: 2022-01-13 21:43:33
#include <stdio.h> int main() { int n,m,a; long long sum=0; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a); if(a&1)m=i; sum+=m; } printf("%lld",sum); return 0; }
Python3 解法, 执行用时: 249ms, 内存消耗: 63688K, 提交时间: 2022-02-09 09:29:47
n=int(input()) a=list(map(int,input().split())) tot=0 ans=0 for i in range(0,n): if a[i]&1: tot=i+1 ans+=tot print(ans)