HDU 4814 Golden Radio Base

很显然是个进制转换的题,根据题意有a^2 = a + 1  -> a^n = a^(n-1) + a^(n-2),这样就能消除两个连续1。

另,a^3 = a^2 + 1 = 2*a+2 = 2*(a+1)  =  2*a。这样就可以将悉数转化为01。

10^9大约是2^30,所以总长度不超高150,直接模拟就好了。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <ctime>
#include <iomanip>

#pragma comment(linker, "/STACK:1024000000");
#define EPS (1e-6)
#define LL long long
#define ULL unsigned long long
#define _LL __int64
#define INF 0x3f3f3f3f
#define Mod 1000000007
#define Seed 31

using namespace std;

ULL hash[100010];
ULL K;

char s[100010];

map<ULL,int> ma;

int main()
{
    int n,m,l,i,j;

    while(scanf("%d %d",&m,&l) != EOF)
    {
        scanf("%s",s);

        for(n = strlen(s), i = n-1 ,hash[n] = 0;i >= 0; --i)
            hash[i] = hash[i+1]*Seed + (s[i]-'a'+1);
        for(K = Seed,i = 2;i <= l; ++i)
            K *= Seed;
//        for(i = 0;i < n-l; ++i)
//            printf("i = %d hash = %I64u\n",i,hash[i]-hash[i+l]*K[l]);
        ULL tmp;
        int anw = 0;
        for(i = 0;i < l && m*l+i < n; ++i)
        {
            ma.clear();

            for(j = i;j < m*l+i;j += l)
                ma[hash[j] - hash[j+l]*K]++;

            if(ma.size() == m)
                anw++;

            for(j = m*l+i;j+l <= n; j += l)
            {
                ma[hash[j-m*l]-hash[j-m*l+l]*K]--;
                if(ma[hash[j-m*l]-hash[j-m*l+l]*K] == 0)
                    ma.erase(hash[j-m*l]-hash[j-m*l+l]*K);

                ma[hash[j] - hash[j+l]*K]++;

                if(ma.size() == m)
                    anw++;
            }
        }
        printf("%d\n",anw);
    }

    return 0;
}
时间: 2024-10-14 07:02:47

HDU 4814 Golden Radio Base的相关文章

HDU - 4814 Golden Radio Base (长春赛区B题)

最小二乘法又叫做最小平方法,是一种数学优化技术.它通过最小化误差的平方和寻找数据的最佳函数匹配. 通常情况下最小二乘法用于求回归问题.以简单的线性最小二乘为例,二维平面上给定个点的坐标,确定一条直线, 要求大致符合这个点的走向. 我们可以设这条直线的方程为,那么就要使在处的函数值与给定的值相 差达到最小,也就是说,要确定的值,使得 最小.根据这种方法求的值就是典型的最小二乘法. 可以看出是的一个二元函数,要求的最小值,那么求偏导,有 进一步得到 然后联立两式可以解出,如果方程数比较多,我们可以用

HDU 4814 Golden Radio Base 小模拟

链接:http://acm.hdu.edu.cn/showproblem.php?pid=4814 题意:黄金比例切割点是,如今要求把一个10进制的的数转化成一个phi进制的数,而且不能出现'11'的情况. 思路:因为题目中给出了两个式子,题目就变成了一道简单的模拟题了.因为整个phi进制的数最多仅仅有200,而数据中最多仅仅有100位,所以从aa[50]=tot 開始模拟就可以. 代码: #include<iostream> #include<cstdio> #include&l

HDU 4814 Golden Radio Base 模拟

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4814 题目大意: 把一个正整数表示为φ进制, φ = (1+√5)/2 . 且已知: 1. φ + 1 = φ 2 ,所以有11(φ) = 100(φ),且要求11要转变为100 2. 2 * φ 2  = φ3 + 1 . 解题思路: 观察发现,2 = 10.01.所以对于一个数N,能够从N/2 推导得到,是一个模拟的过程.我比赛的时候居然用了高速幂... 代码: #include<cstdio>

HDOJ 4814 Golden Radio Base

利用题目中给出的公式和hint可以得到两个有用的公式: phi^(n) = phi^(n-1)+phi^(n-2) 2*(phi^n) = phi^(n+1)+phi^(n-2) 可以计算出phi^100远大于10^9,所以推测最后得到的phi进制的数整数和小数部分应该不会超过100位,事实表明,50位就能过. 所以最终变成了简单的模拟. Golden Radio Base Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 3276

ACM学习历程——HDU4814 Golden Radio Base(数学递推) (12年成都区域赛)

Description Golden ratio base (GRB) is a non-integer positional numeral system that uses the golden ratio (the irrational number (1+√5)/2 ≍ 1.61803399 symbolized by the Greek letter φ) as its base. It is sometimes referred to as base-φ, golden mean b

HDU 3820 Golden Eggs

http://acm.hdu.edu.cn/showproblem.php?pid=3820 题意:n*m的格子,每个格子放金蛋或银蛋,每个格子的金蛋和银蛋都有一个对应的点权,如果有两个金蛋相连,则需要G的代价,如果有两个银蛋相连,需要S的代价. 思路: 这道题和HDU的格子取数是一个套路. 在前面的格子取数问题中,我们奇偶建图,相邻点之间连INF就代表这两个点中至少会选择一个,由于是最小割,肯定是选择权值小的点.这道题目的建图稍微复杂点,因为每个格子有三种选择,即可以选择放金蛋或是放银蛋或空着

HDU 5815 - Golden Week

题意: 王国地图为 n 个节点的根树,首都为 1, m 个旅行家要去不同的终点旅游,他们分别有各自的预算,如果路上总费用超过预算就不去了 给每条路定价, 让赚的钱最多 分析:    DP[i][j]表示当从首都到城市i的路径花费为j时,以i为根的子树中的点作为目的城市的旅行者的最大花费. 只需要考虑j值等于0或等于某位旅行者预算的情况,所以dp的状态数是O(NM)的. 状态转移方程式: DP[i][j] = j* n(i,j) + ∑?max(DP[k][j?i]) (ji >= j) ( n(

HDU 4814

题目的大意就是用(1+√5)/2进制来表示十进制中的数. 做法就是一个模拟,a[]数组表示答案,其中第50位表示个位,后面的是小数位.利用题目给的两个公式,进行一系列进位等操作. #include <iostream> #include <cstdio> #include <cstring> using namespace std; #define maxn 110 int a[maxn]; int main() { //freopen("out(2).txt

2015.10.27 2013---长春

这场做了5题 呜呜呜--- 这场老是读错题,,,还读不懂题,,, 可以滚了--- A - Hard Code 签到 B - Golden Radio Base 进制的转换---读好久读不懂题--- C wtw 写的 D 读好久读不懂题--- E F syh发现是白薯模板题-- G wtw 用哈希,线段树搞的-- 还是不懂他怎么搞的 先用的模是1e9+7,,,wa了--- 后来用了这个----998244353 就过了-- J 最开始还以为是水题----sad--- 后来看了题解做的--- htt