• Codeforces 776C:Molly's Chemicals


    Codeforces 776C:Molly's Chemicals

    题目链接:http://codeforces.com/contest/776/problem/C

    题目大意:给出$n$个数,可以构造出$n^2$个区间,问有多少个区间和是$k$的幂次的区间.

    前缀和+枚举

    昨天晚上从枚举区间入手愣是想不出来,实际上只需要换个思路枚举$k^x$,用$map[pre[i]]$存储前缀和$pre[i]$,查询是否有区间和为$k^x$的区间也就是判断$map[pre[i]-k^x]$是否存在了.

    /*注意$k=1$或$k=-1$的情况*/

    代码如下:

     1 #include <iostream>
     2 #include <map>
     3 #define mabs(x) (x<0?-x:x)
     4 using namespace std;
     5 typedef long long ll;
     6 ll n,k,t,pre,a[100005],ans;
     7 map<ll,int>mp;
     8 map<ll,bool>vis;
     9 void init(){
    10     vis[t]=1;
    11     pre=0;
    12     mp.clear();
    13     mp[0]++;
    14 }
    15 int main(void){
    16     cin>>n>>k;
    17     for(int i=0;i<n;++i)cin>>a[i];
    18     for(t=1;!vis[t]&&mabs(t)<=100000000000000;t*=k){
    19         for(int i=0;i<n;++i){
    20             pre+=a[i];
    21             mp[pre]++;
    22             ans+=mp[pre-t];
    23         }
    24     }
    25     cout<<ans;
    26 }
  • 相关阅读:
    gitlab CI
    arm模拟环境qemustatic
    golang 离线使用模块
    企业微信机器人推送消息
    贴片丝印对照
    Air32F103CBT6
    RTT F411CE
    STM32F411CEU6
    CMakeLists.txt使用
    websocket测试(nodered)
  • 原文地址:https://www.cnblogs.com/barrier/p/6437779.html
Copyright © 2020-2023  润新知