列表

详情


NC52940. 114514

描述

给你一个长为n的序列
定义一个序列下标的子集为先辈,当且仅当选出的这些下标对应的序列值的乘积为114514,而且因为只有一只野兽,所以有个要求是选出来的这些下标所对应的序列值最多有一个1
请输出有多少先辈

输入描述

第一行一个数表示n
之后一行n个数表示这个序列

n <= 229028,序列的值域在[0,1145141919]中

输出描述

输出一行一个数表示答

示例1

输入:

2
1 114514

输出:

2

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 50ms, 内存消耗: 872K, 提交时间: 2019-09-20 22:12:24

#include<bits/stdc++.h>
using namespace std;
#define ll unsigned long long
ll ans;
int n,i,a[200000];
int main()
{
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&i);
        if(i<200000)a[i]++;
    }
    ans=(a[114514]+(ll)a[2]*a[31]*a[1847]+(ll)a[2]*a[57257]+(ll)a[31]*a[3694]+(ll)a[62]*a[1847])*(a[1]+1);
    cout<<ans<<endl;
    return 0;
}

C++(clang++11) 解法, 执行用时: 63ms, 内存消耗: 2592K, 提交时间: 2021-04-11 15:11:21

#include<bits/stdc++.h>
using namespace std;
#define ll unsigned long long

ll m,flag,p,a[10000000];
int main(){
    cin>>m;
    for (int i=1;i<=m;++i){
           cin>>p;
           a[p]++;
    }
    cout<<(a[1]+1)*(a[114514]+a[2]*a[31]*a[1847]+a[62]*a[1847]+a[57257]*a[2]+a[3694]*a[31]);
    return 0;
}

Python(2.7.3) 解法, 执行用时: 224ms, 内存消耗: 23336K, 提交时间: 2019-09-20 19:25:21

n=int(raw_input())
a=raw_input().split()
a=[int(i) for i in a]
buc=[0]*115000
for i in range(0,n):
    buc[a[i]]=buc[a[i]]+1
ans=0
ans=(buc[1]+1)*(buc[114514]+buc[2]*buc[31*1847]+buc[1847]*buc[62]+buc[1847*2]*buc[31]+buc[2]*buc[31]*buc[1847])
print(int(ans))

Python3(3.5.2) 解法, 执行用时: 135ms, 内存消耗: 29360K, 提交时间: 2019-09-21 10:10:17

import collections
n=int(input())
list1=input().split()
c=collections.Counter(list1)
print((c['2']*c['31']*c['1847']+c['62']*c['1847']+c['2']*c['57257']+c['31']*c['3694']+c['114514'])*(1+c['1']))

上一题