Just do it(规律+技巧+总是时间超限)

2024-02-14 15:48

本文主要是介绍Just do it(规律+技巧+总是时间超限),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:http://acm.hdu.edu.cn/showproblem.php?pid=6129
题目:Just do it

Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)
Total Submission(s): 479 Accepted Submission(s): 264

Problem Description
There is a nonnegative integer sequence a1…n of length n. HazelFan wants to do a type of transformation called prefix-XOR, which means a1…n changes into b1…n, where bi equals to the XOR value of a1,…,ai. He will repeat it for m times, please tell him the final sequence.

Input
The first line contains a positive integer T(1≤T≤5), denoting the number of test cases.
For each test case:
The first line contains two positive integers n,m(1≤n≤2×105,1≤m≤109).
The second line contains n nonnegative integers a1…n(0≤ai≤230−1).

Output
For each test case:
A single line contains n nonnegative integers, denoting the final sequence.

Sample Input
2
1 1
1
3 3
1 2 3

Sample Output
1
1 3 1

Source
2017 Multi-University Training Contest - Team 7

思路:这个题目真的让我感觉自己有多么弱,这次比赛也是这样的,心累。发现自己很多知识不会。之前做的时候,还把规律找错了,最关键的时候队友找出来的规律是每个数友有相应的周期,比如:3的周期是4,4的周期是4,N为(5到8)的时候,周期是8.但是这个并没有什么用,周期还是太大了。比完之后,看到了别人的题解,竟然可以联想到杨辉三角,还能找出这样规律,真是佩服。还有一个自己不知道德知识点:C(n,m)的结果如果是奇数的话,那么(n|m)=m.(这个自己找资料区了解,跟Lucas定理有关),下面是别人的做法。
我们随手写下四项的前两次结果,不难看出,我们设定ans【i】【j】表示进行到第i次,第j个位子的答案的话,ans【i】【j】有推导式:
ans【i】【j】=ans【i-1】【j】^ans【i】【j-1】;
这里写图片描述
那么很显然,对于每一项,他的系数就是杨辉三角的值,那么如果当前位子系数为奇数的话,结果就会有贡献。
同样很显然,我们第i行,第j列的答案,其系数为C(i+j-2,j-1)【此时只考虑a的系数】;

那么我们只需要考虑第一项(a)对所有位子的结果的影响即可(因为b就相当于向后挪了一下递推即可)。
那么根据上述公式,考虑第一项(a)对所有位子的结果的影响然后递推一下就行了

别人的代码:

#include<stdio.h>
#include<string.h>
using namespace std;
int a[2050000];
int b[2050000];
int main()
{int t;scanf("%d",&t);while(t--){int n,m;scanf("%d%d",&n,&m);memset(b,0,sizeof(b));for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++){int y=i-1;int x=i+m-2;if((x&y)==y){for(int j=i;j<=n;j++)b[j]^=a[j-i+1];}}for(int i=1;i<=n;i++){if(i>1)printf(" ");printf("%d",b[i]);}printf("\n");}
}

自己修改后代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){int t,n,m;int a[200001];int b[200001];scanf("%d",&t); int x,y;int i,j;while(t--){scanf("%d%d",&n,&m);for(i=0;i<n;i++){scanf("%d",&a[i]);//不要用cin输入 }memset(b,0,sizeof(b));//注意一定要初始化 for(i=0;i<n;i++){x=i;y=m+i-1;//注意我这里i=0开始的。 if((x&y)==x){for(j=i;j<n;j++){b[j]^=a[j-i];//相当于递归,把前面的每一项当做第一项,然后用那个规律,这样比每一次吧那一项算完省时。 }}}cout<<b[0];for(i=1;i<n;i++){cout<<' '<<b[i];}cout<<endl;}return 0;
}

(推荐这个题的其他题解http://blog.csdn.net/mengxiang000000/article/details/77200451)
(自己太弱了)

这篇关于Just do it(规律+技巧+总是时间超限)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/708928

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

计蒜客 Half-consecutive Numbers 暴力打表找规律

The numbers 11, 33, 66, 1010, 1515, 2121, 2828, 3636, 4545 and t_i=\frac{1}{2}i(i+1)t​i​​=​2​​1​​i(i+1), are called half-consecutive. For given NN, find the smallest rr which is no smaller than NN

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

批处理以当前时间为文件名创建文件

批处理以当前时间为文件名创建文件 批处理创建空文件 有时候,需要创建以当前时间命名的文件,手动输入当然可以,但是有更省心的方法吗? 假设我是 windows 操作系统,打开命令行。 输入以下命令试试: echo %date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%_%time:~3,2%_%time:~6,2% 输出类似: 2019_06

【MRI基础】TR 和 TE 时间概念

重复时间 (TR) 磁共振成像 (MRI) 中的 TR(重复时间,repetition time)是施加于同一切片的连续脉冲序列之间的时间间隔。具体而言,TR 是施加一个 RF(射频)脉冲与施加下一个 RF 脉冲之间的持续时间。TR 以毫秒 (ms) 为单位,主要控制后续脉冲之前的纵向弛豫程度(T1 弛豫),使其成为显著影响 MRI 中的图像对比度和信号特性的重要参数。 回声时间 (TE)

小技巧绕过Sina Visitor System(新浪访客系统)

0x00 前言 一直以来,爬虫与反爬虫技术都时刻进行着博弈,而新浪微博作为一个数据大户更是在反爬虫上不遗余力。常规手段如验证码、封IP等等相信很多人都见识过…… 当然确实有需要的话可以通过新浪开放平台提供的API进行数据采集,但是普通开发者的权限比较低,限制也比较多。所以如果只是做一些简单的功能还是爬虫比较方便~ 应该是今年的早些时候,新浪引入了一个Sina Visitor Syst