列表

详情


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)

上一题