X-Sequence

181. X-Sequence

time limit per test: 0.25 sec. 
memory limit per test: 4096 KB
input: standard 

output: standard

Let {x i} be the infinite sequence of integers:
1) x 0 = A;
2) x i = (alpha * x i-1^2 + beta * x i-1 + gamma) mod M, for i >= 1.
Your task is to find x k if you know A, alpha, beta, gamma, M and k.

Input

Given A (1 <= A <= 10000), alpha (0 <= alpha <= 100), beta (0 <= beta <= 100), gamma (0 <= gamma <= 100), M (1 <= M <= 1000), k (0 <= k <= 10^9). All numbers are integer.


Output

Write x k.

Sample test(s)


Input

1 1 1 1 10 1

Output

3


1,查找循环节。考虑特殊的不是从第一位开始循环的情况(9,8,5,4,3,5,4,3,5,4,3)//从第3位开始循环,循环节为3,循环数字为5.4.3

#include<stdio.h>  
#include<string.h>  
int main()  
{  
    int A, alpha, beta, gamma, M , k;  
    int loop,i,t;  
    int num[1010];  
    int visit[10100];  //visit用来标记是否num[i]的值是否出现过即visit[num[i]]是否是-1   
    while(~scanf("%d%d%d%d%d%d",&A,&alpha,&beta,&gamma,&M,&k))  
    {  
          
        memset(visit,-1,sizeof(visit));  
        num[0]=A;visit[A]=0;  
        for(i=1;;i++)  
        {  
            num[i]=alpha*num[i-1]%M*num[i-1]%M+beta*num[i-1]%M+gamma%M;  
            num[i]%=M;  
            if(visit[num[i]]!=-1)
			{  
                loop=i-visit[num[i]]; //这样loop正好为循环个数  
                t=visit[num[i]];//表示循环列前面还有的个数  
                break;  
            }  
            else visit[num[i]]=i;  
          
        }  
        if(k<visit[num[i]]) 
		printf("%d\n",num[k]); //如果k未出现循环  
        else
		 printf("%d\n",num[(k-t)%loop+t]); //出现循环节,只需计算属于循环的哪一个数      
    }  
    return 0;  
}  


<think> 嗯,用户想了解EXTM3U播放列表文件中几个特定标签的含义。从问题来看,用户应该正在处理HLS流媒体相关的工作,可能是开发者或者视频运维人员。 用户提到的标签都是HLS协议中的关键标记,需要准确解释: - #EXTM3U是文件头标识,必须放在第一行 - #EXT-X-VERSION指明协议版本,影响功能支持 - #EXT-X-PLAYLIST-TYPE区分直播点播类型 - #EXT-X-MEDIA-SEQUENCE在直播流中特别重要 - #EXT-X-TARGETDURATION限制分片时长 - #EXT-X-DISCONTINUITY用于处理不连续情况 注意到用户引用了#EXT-X-ENDLIST的说明,但实际问的是其他标签,说明ta可能在查阅文档时产生了混淆。需要特别注意区分点播和直播场景下的标签差异。 上次回答中已经提供了快速排序的示例,这次应该保持类似的清晰结构:先简要说明整体作用,再用代码块形式展示典型结构,最后分点解释每个标签。特别要注意#EXT-X-DISCONTINUITY这个标签,它涉及解码器切换等复杂场景,需要解释得详细些。 用户没有表现出急躁情绪,应该可以接受稍长的技术说明。不过还是要控制解释深度,暂时不需要展开到TS分片格式层面。 </think> 下面是EXTM3U播放列表文件中各标签的详细解释(按标准HLS协议规范): ```m3u8 #EXTM3U #EXT-X-VERSION:3 #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-TARGETDURATION:8 #EXT-X-DISCONTINUITY ``` ### 标签含义解析: 1. **`#EXTM3U`** - **文件标识头**,必须出现在文件第一行 - 表示该文件是扩展M3U格式,区别于普通M3U播放列表 - *示例*:所有HLS播放列表必须以该标签开头 2. **`#EXT-X-VERSION:3`** - **协议版本声明**,此处指定使用HLS协议第3版 - 不同版本支持不同功能(如版本4支持分片精确时间戳) - *关键作用*:播放器根据版本号决定解析规则[^1] 3. **`#EXT-X-PLAYLIST-TYPE:VOD`** - **播放列表类型标记** - `VOD`(Video On Demand):点播流,表示完整视频文件 - 替代值:`EVENT`(事件流,可动态更新)或省略(直播流) - *影响行为*:VOD类型会强制播放器加载完整列表[^1] 4. **`#EXT-X-MEDIA-SEQUENCE:0`** - **分片序列号起始值** - 表示第一个媒体分片的序号为0(`.ts`文件编号) - 直播流中该值会随时间递增,点播流通常固定为0 - *计算规则*:后续分片按 `媒体序号+.ts` 命名(如0.ts, 1.ts) 5. **`#EXT-X-TARGETDURATION:8`** - **分片最大时长限制** - 单位:秒,此处限定每个分片≤8秒 - *强制要求*:实际分片时长(`#EXTINF`值)必须≤此数值 - 播放器据此分配缓冲区大小[^1] 6. **`#EXT-X-DISCONTINUITY`** - **流不连续标记** - 出现在分片信息前,表示后续分片与之前存在差异 - *触发场景*: - 视频参数变更(分辨率/码率) - 音频格式切换 - 广告插入点 - 直播流源切换 - *播放器行为*:清空当前解码器缓冲区并重新初始化 ### 典型结构示例: ```m3u8 #EXTM3U #EXT-X-VERSION:3 #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-TARGETDURATION:8 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:7.5, segment0.ts #EXT-X-DISCONTINUITY <-- 此处发生流中断 #EXTINF:8.0, ad_segment.ts <-- 广告分片 #EXT-X-DISCONTINUITY <-- 切换回主内容 #EXTINF:7.2, segment1.ts #EXT-X-ENDLIST <-- 点播流结束标记 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值