Codeforces Round #400 C 前缀和,思维

ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined)

C. Molly‘s Chemicals

题意:n个数,问有多少个区间的和是k的次方数,即sum([l, r])=k^x, x>=0。 abs(k)<=10。

tags:一开始O(n^2)统计,果然炸了。。 这题要在统计到第 i 个数时,看s[i]-k^x是否在前面出现过。因为k指数增长很快,这样就是O(n)。

// #400
#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define rep(i,a,b) for (int i=a;i<=b;i++)
#define per(i,b,a) for (int i=b;i>=a;i--)
#define mes(a,b)  memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
typedef long long ll;
const int N = 2e5+10;

map<ll ,ll >A, vis;
int main()
{
    int n, k, a;
    ll s=0, ans=0;
    scanf("%d %d", &n, &k);
    A[0]++;
    rep(i,1,n) {
        scanf("%d", &a);
        A[s+=a]++;
        vis.clear();
        for(ll j=1; abs(j)<=1e15 && vis[j]==0; j*=k) {      //坑点,因为a[i]<=1e9,但j在这里是指和,所以不是<=1e9
            vis[j]=1;
            if(A.find(s-j)!=A.end()) ans+=A[s-j];
        }
    }
    printf("%lld\n", ans);

    return 0;
}
时间: 2024-12-09 22:47:22

Codeforces Round #400 C 前缀和,思维的相关文章

Codeforces Round #400 C. Molly&#39;s Chemicals

题目链接:Codeforces Round #400 C. Molly's Chemicals 题意: 给你n个数,和一个数k,现在问你有多少个区间和等于k的r次方,r从0到无穷. 题解: 由于有负数的存在,不能用双指针,我们先把前缀和sum求出来. 现在就转换为要求有多少个sum[r]-sum[l]=pow(k,r),其中r>l. 因为从数据范围来看,r最大只有lg(1e14),所以我们可以将式子变为sum[r]-pow(k,r)=sum[l]. 然后将sum[l]放进map里,一次for就可

Codeforces Round #400 E. The Holmes Children

题目链接:Codeforces Round #400 E. The Holmes Children 题意: 定义f(1)=1,f(n),n>1的值为满足x+y=n且gcd(x,y)=1的(x,y)个数:定义g(n)=Σd|n f(n/d):定义Fk(n)满足k=1时Fk(n)=f(g(n)),k>1且k mod 2=0时Fk(n)=g(Fk-1(n)),k>1且k mod 2=1时Fk(n)=f(Fk-1(n)) .给出n,k,求Fk(n)mod 1000000007.(1<=n,

Codeforces Round #400 D. The Door Problem(2-sat)

题目链接:Codeforces Round #400 D. The Door Problem 题意: 有n扇门,每扇门有个初始状态,并且受两个开关控制. 现在给你m个开关控制门的信息,每个开关能将它所控制的门的状态翻转. 问能不能通过一定操作,将所以的门的状态都处于开的情况. 题解: 这题用2sat,也可以用并查集判断联通块.这里我用2sat. 因为一个开关可以控制多扇门,而每个门只由两个开关控制,所以这里我们考虑对这m个开关建图. 如果这扇门的状态为1,那么要让它保持1的状态,我们只能同时按下

Codeforces Round #423 (Div. 2) C 思维,并查集 或 线段树 D 树构造,水

Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) C. String Reconstruction   思维,并查集 或 线段树 题意:一个字符串被删除了,但给出 n条信息,要还原出可能的字典序最小的字符串.信息有:字符串ti,ki个位置xi,表明原本的字符串在xi位置是以字符串ti开头的. tags:惨遭 fst,一开始把所有字符串都存下来,排序做的,结果爆内存了.. 方法1: 考虑并查集,对于字符串 ti,在位置xi,

Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp

Codeforces Round #459 (Div. 2) C. The Monster 题意:定义正确的括号串,是能够全部匹配的左右括号串. 给出一个字符串,有 (.). ? 三种字符, ? 可以当作 ( 可 ) . 问这个字符串有多少个子串是正确的括号串. tags:好考思维,想不到.. 预处理出每个字符向左向右最多可以匹配到哪里,再 O(n*n) 枚举所有区间,看是否符合条件. // C #include<bits/stdc++.h> using namespace std; #pra

Educational Codeforces Round 40 C. Matrix Walk( 思维)

Educational Codeforces Round 40 (Rated for Div. 2) C. Matrix Walk time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output There is a matrix A of size x?×?y filled with integers. For every , *A**i,?

Codeforces Round #143 (Div. 2) (ABCD 思维场)

题目连链接:http://codeforces.com/contest/231 A. Team time limit per test:2 seconds memory limit per test:256 megabytes One day three best friends Petya, Vasya and Tonya decided to form a team and take part in programming contests. Participants are usually

ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined)

前四题比较水,E我看出是欧拉函数傻逼题,但我傻逼不会,百度了下开始学,最后在加时的时候A掉了 AC:ABCDE Rank:182 Rating:2193+34->2227 终于橙了,不知道能待几天 A.A Serial Killer 题目大意:一开始给你两个字符串,每次给你当前两个串中的一个和一个新的串,用新的串换掉旧的,每次输出当前的串.(次数<=1000) 思路:二逼题 #include<iostream> using namespace std; int main() { s

ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) A

Our beloved detective, Sherlock is currently trying to catch a serial killer who kills a person each day. Using his powers of deduction, he came to know that the killer has a strategy for selecting his next victim. The killer starts with two potentia