题目大意
任务:从0出发,访问0~n各一次,可以在任意一点终止,需要用票才能从一个点到另一个点。
有三种票,跳跃长度分别为1 2 3,有a,b,c张(3<= a,b,c<=5000)并且n=a+b+c。
每张票只能用一次。输入保证有解。
样例
input
2
3 3 3
3 4 3
output
0 3 1 2 5 4 6 9 7 8
0 3 1 2 5 4 6 9 7 8 10
解释
思路
首先引入一个概念叫做同余类,以正整数m为模,则任何整数必然与0,1,2,3,…,m-1之一同余,将同余的数归为一类。
比如当m为4的时候。
{… -4 0 4 8 …}
{… -3 1 5 9 …}
{… -2 2 6 10 …}
{… -1 3 7 11 …}
首先考虑这样的一个问题:
如果只有一个a和n个b,然后就可以先跳2步,0 2 4 6 8,然后跳一个1,改变同余类,然后往回跳,结束。
引入了c,首先就把c消掉。
当c%3为0时,可以先往右调c/3个3,往右跳1步,往左跳c/3个3,往右跳1步,往右跳c/3个3,到达c/3*3+2的位置,这个时候c已经用完了。
c%3不为0的时候同理。
代码
#include<cstdio>
#include<map>
#include<queue>
#include<cstring>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<stdlib.h>
#include <math.h>
#include <stack>
using namespace std;
const int maxn = 5005;
int main()
{
int a,b,c;
int CaseNum;
scanf("%d",&CaseNum);
while(CaseNum--){
scanf("%d%d%d",&a,&b,&c);
int pos =

这篇博客探讨了一种数学构造问题,涉及到利用不同跳跃长度的票(1、2、3)从0开始访问0到n的所有整数。题目保证了有解,并给出了a、b、c(3≤a,b,c≤5000且n=a+b+c)的限制条件。博主通过同余类的概念解析了解题思路,并针对不同情况讨论了如何消除c的影响。样例和代码展示了具体的解决方案。"
113965481,10541562,Python Matplotlib 横排图例与 LaTeX 标签,"['Python编程', '数据可视化', '图表', 'Matplotlib库']

2008

被折叠的 条评论
为什么被折叠?



