ZOJ2599 数位统计论文例题

本文介绍了一种解决特定字符串比较及求和问题的算法,通过预处理技术简化计算过程。利用vector容器特性进行高效计算,并提供了具体实现代码示例。

看了论文,又看了别人博客,还是卡了我两天,看来我对字符串的感知能力真是渣....贴个博客造(bao)福(fu)社会。总结一下

把问题先分析清楚,然后充分预处理,会使后面的过程很简单。

字典序在位数相等的情况下可以转换成大小序。

注意别忽视空串,也就是null。

注意首位能否为0。

另外有个有意思的地方.. vector容器太厉害了...比如直接比较v1<v2是比较v1和v2的字典序。又比如partial_sum、accumulate函数。

代码(http://blog.watashi.ws/1213/andrew-stankevich-6-solution/ZOJ2599/  这个NB.. 我贴的代码是为了以后自己复习的...参考了链接里的代码..)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
long long se[20][200];
long long sl[20][200];
long long le[200][20];
long long ll[200][20]; 
void Init()
{
    long long i,j,k;
    memset(se,0,sizeof(se));
    memset(sl,0,sizeof(sl));
    se[0][0]=1,le[0][0]=1;
    for(i=1;i<20;++i)
        for(j=0;j<200;++j)
        {
            for(k=0;k<10;++k)
                if(j-k>=0)
                    se[i][j]+=se[i-1][j-k];
            le[j][i]=se[i][j];
        }
    for(i=0;i<20;++i)
    {
        sl[i][0]=0;
        for(j=1;j<200;++j)
            sl[i][j]=sl[i][j-1]+se[i][j-1];
    }
    for(i=0;i<200;++i)
    {
        ll[i][0]=0;
        for(j=1;j<20;++j)
            ll[i][j]=ll[i][j-1]+le[i][j-1];
    }
}
long long SumLess(vector<int>& n,long long sum)
{
    long long i,j,tmp=0,ans=0;
    for(i=0;i<n.size();++i)
        tmp+=n[i];
    if(tmp<sum)
        ans++;
    for(i=0;i<n.size();++i)
    {
        for(j=0;j<n[i];++j)
            if(sum-j>=0)
                ans+=sl[n.size()-i-1][sum-j];
        sum-=n[i];
        if(sum<0)
            break;
    }
    return ans-1;
}
long long LexLess(vector<int>& n,long long sum,vector<int>& k)
{
    long long i,j,ans=0,tmp=sum,sum2=0;
    for(i=0;i<k.size();++i)
    {
        if(sum==0)
            ans++;     
        for(j=(i==0?1:0);j<k[i];++j)
            if(sum>=j)
            {
                ans+=ll[sum-j][n.size()-i-1];
            }
        sum-=k[i];
        if(sum<0)
            break;
    }
    sum=tmp;
    if(k<=n)
    {
        for(i=0;i<k.size();++i)
        {
            for(j=(i==0?1:0);j<k[i];++j)
                if(sum>=j)
                    ans+=le[sum-j][n.size()-i-1];
            sum-=k[i];
            if(sum<0)
                break;
        }
    }
    else
    {
        for(i=0;i<n.size();++i)
        {
            for(j=(i==0?1:0);j<n[i];++j)    
                if(sum>=j)
                    ans+=le[sum-j][n.size()-i-1];
            sum-=n[i];
            if(sum<0)
                break;
        }
        if(sum==0)   
            ans++;
    }    
    return ans;
}
long long Work1(vector<int>& n,vector<int>& k)
{
    long long i,sum=0;
    for(i=0;i<k.size();++i)
        sum+=k[i];
    return SumLess(n,sum)+LexLess(n,sum,k)+1;
}
long long Work2(vector<int>& n,long long k)
{
    long long l=1,r=200,mid,ret,sum,i,j;
    while(l!=r)
    {
        mid=((l+r)>>1)+1;
        if(SumLess(n,mid)<k)
            l=mid;
        else
            r=mid-1;
    }
    sum=l;
    k-=SumLess(n,sum);
    k--;
    vector<int> ans;
    ans.clear();
    while(ans.size()<n.size())
    {
        ans.push_back(9);
        while(ans.back()>=0&&LexLess(n,sum,ans)>k)
        {
            ans.back()--;   
        }
        if(ans.back()<0)
            break;
    }
    if(ans.back()<0)
        ans.pop_back();
    ret=0;
    for(i=0;i<ans.size();++i)
        ret=ret*10+ans[i];
    return ret;
}
vector<int> ToVector(long long n)
{
    vector<int> v;
    while(n)
    {
        v.push_back(n%10);  
        n/=10;
    }
    reverse(v.begin(),v.end());
    return v;
}
int main()
{
    vector<int> nv,kv;
    long long n,k;
    Init();
    while(cin>>n>>k)
    {
        if(n==0&&k==0)
            break;
        nv=ToVector(n);
        kv=ToVector(k);
        cout<<Work1(nv,kv)<<" ";
        cout<<Work2(nv,k)<<endl;
    }
    return 0;
}  


 

内容概要:本文介绍了一种用于电磁暂态(EMT)研究的第四类全变流器型风力发电系统的通用Simulink仿真模型,旨在构建一个能够准确反映实际风电系统动态特性的简化通用模型。该模型涵盖了风力机、传动链、发电机、全功率变流器及其控制策略等关键组成部分,重点突出系统在电网故障、风速波动等复杂工况下的动态响应能力,适用于风电并网电磁暂态分析、新型电力系统稳定性评估及高比例可再生能源接入场景的研究。模型设计兼顾准确性与仿真效率,便于研究人员快速搭建和调试,推动风电系统建模与控制技术的发展; 适合人群:具备一定电力系统理论基础和MATLAB/Simulink仿真能力,从事新能源发电、电力电子变换、风电并网控制及相关方向的研究生、科研人员及工程技术人员; 使用场景及目标:①开展风电系统在电网扰动下的电磁暂态仿真分析;②研究全功率变流器风电机组的动态行为与控制特性;③支撑新型电力系统中高渗透率风电接入的稳定性与电能质量评估,服务于学术研究、课程教学与工程项目前期仿真验证; 阅读建议:建议读者结合文中提供的模型结构与参数设置,在Simulink环境中动手复现并调试仿真模型,通过设置不同运行工况(如三相短路、低电压穿越、风速突变等)观察系统响应,深入理解全变流器风电机组的建模方法、控制逻辑与动态特性,进而拓展应用于更复杂的多机并网或综合能源系统仿真场景。
内容概要:本文探讨了Hash算法在芯片行业,特别是网络处理器(NPU)中的性能优化实践,聚焦于如何通过硬件流水线设计实现纳秒级高速哈希查找。文章分析了传统软件哈希方案在高带宽场景下的局限性,提出基于硬件描述语言或高层次综合(HLS)的设计方法,采用CRC32等硬件友好型哈希函数、并行多路哈希、流水线化解耦以及双端口存储结构等核心技术,实现低延迟、无阻塞的数据包处理。通过C++风格的HLS代码示例,展示了从算法选择到资源优化的完整硬件加速逻辑,并深入剖析了循环展开、位宽控制、内存映射和流水线调度等关键实现细节。最后展望了可编程交换机、P4语言支持及TCAM与哈希混合架构等未来发展方向。; 适合人群:具备数字电路基础、熟悉Verilog/SystemVerilog或HLS的芯片设计工程师,以及从事网络芯片、FPGA加速、高性能路由设备研发的技术人员(工作年限1-5年为宜);也适合对硬件加速算法感兴趣的研究人员。; 使用场景及目标:①掌握如何将哈希算法高效映射到硬件逻辑中以满足线速转发需求;②理解流水线设计、资源约束优化、读写冲突规避等在实际芯片项目中的应用;③为开发高性能网络处理器中的流表/路由表查找单元提供技术参考与实现范例。; 阅读建议:学习时应结合HLS工具(如Xilinx Vitis HLS)进行代码仿真与综合,重点关注#pragma指令对硬件结构的影响,并对比不同哈希算法在资源占用与时序表现上的差异,深入理解“空间换时间”的硬件优化本质。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值