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

相关文章

怎么关闭Ubuntu无人值守升级? Ubuntu禁止自动更新的技巧

《怎么关闭Ubuntu无人值守升级?Ubuntu禁止自动更新的技巧》UbuntuLinux系统禁止自动更新的时候,提示“无人值守升级在关机期间,请不要关闭计算机进程”,该怎么解决这个问题?详细请看... 本教程教你如何处理无人值守的升级,即 Ubuntu linux 的自动系统更新。来源:https://

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

不删数据还能合并磁盘? 让电脑C盘D盘合并并保留数据的技巧

《不删数据还能合并磁盘?让电脑C盘D盘合并并保留数据的技巧》在Windows操作系统中,合并C盘和D盘是一个相对复杂的任务,尤其是当你不希望删除其中的数据时,幸运的是,有几种方法可以实现这一目标且在... 在电脑生产时,制造商常为C盘分配较小的磁盘空间,以确保软件在运行过程中不会出现磁盘空间不足的问题。但在

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.