标题可能被吃了


测试题,先上题:

数学作业

homework.cpp

【问题描述求:方程x1+2x2+„+nxn=m的所有非负整数解(x1,x2,„,xn)的个数。例如,方程:x1+2x2+3x3+4x4+5x5=57组解:(5,0,0,0,0)、(3,1,0,0,0)、……、(0,0,0,0,1)。

 【输入数据】(homework.in)

2个整数nm

【输出数据】(homework.out)

方程非负整数解的个数ans,如果解超过10^9,只需输出ans mod 10^9

【输入样例】 5 5

【输出样例】 7

【数据范围】 1≤n≤50000≤m≤5000


据说是很明显的完全背包问题,可惜我没怎么看出来,研究了半天只发现和背包有关,于是乎鼓捣了个类似01背包的东西上去,开了二维数组,但[5000][5000]明显不合适,那么就需要倒序。另外还有个要注意的点是结果如果超过10的9次方,只输入以内的结果。所以是需要取余1个10的9次方。这种题因为样例数据小,可以手动操作下可以发现有迹可循。

for(int i=1;i<=n;i++){
  for(int j=i;j<=m;j++){
   f[j]=(f[j]+f[j-i])%1000000000;
  }
 }
 printf("%lld",f[m]);

第二题


魔法石的诱惑

rob.cpp

问题描述

修罗魔王远远地看见邪狼王狂奔而来,问道:“慌慌张张干什么?”

邪狼王大口大口初期:“我路过一家魔法石店,看到摆着那么多高阶魔法石,我就去抢了一大袋。”

修罗王怒道:“光天化日之下,朗朗乾坤,众目睽睽之下,你也敢抢?”

狼王:“我只看到了魔法石,没有看到人。。。”

修罗王:“。。。。。”

其实邪狼王的贪婪也很容易理解,因为高阶魔法石有一个特征,即它的重量进行阶乘运算后末尾有几个0,就拥有同等重量普通魔法石几倍的法力,例如5=5*4*3*2*1=120,所以120有一个0,这意味着该魔法石拥有同等重量的普通魔法石1倍的魔法力,你的任务是找到最小的自然数N,使N!在十进制下有Q0结尾。

输入格式(rob.in)

一个数Q0Q10^8

输出格式(rob.out)

如果无解,输出”No solution”,否则输出N

输入样例

2

输出样例

10

这神奇的剧情展开还以为要挖点信息出来,然而对题并没有什么卵用。据说可以用纯数学的方法做。这道题很明显的可以看到给的数据范围较大,于是乎要用到分治中的二分 。

while (start <= end)//二分查找
  {
    int mid = (end - start) / 2 + start;
    int t = solve(mid);
    if (t == Q && mid < ans)
      ans = mid;
    if (t > Q)
      end = mid - 1;
    else if ( t < Q )
      start = mid + 1;
    else
      end = mid - 1;
  }
  if (ans != 500000001)
    printf("%d\n", ans);
  else
    printf("No solution\n");

架设电话线

(phoneline.cpp)

Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务。于是,FJ必须为此向电信公司支付一定的费用。

   FJ的农场周围分布着N(1 <= N <= 1,000)根按1..N顺次编号的废弃的电话线杆,任意两根电话线杆间都没有电话线相连。一共P(1<= P <= 10,000)对电话线杆间可以拉电话线,其余的那些由于隔得太远而无法被连接。

    i对电话线杆的两个端点分别为A_iB_i,它们间的距离为L_i (1 <= L_i <= 1,000,000)。数据中保证每对{A_iB_i}最多只出现1次。编号为1的电话线杆已经接入了全国的电话网络,整个农场的电话线全都连到了编号为N的电话线杆上。也就是说,FJ的任务仅仅是找一条将1号和N号电话线杆连起来的路径,其余的电话线杆并不一定要连入电话网络。

    经过谈判,电信公司最终同意免费为FJ连结K(0 <= K < N)对由FJ指定的电话线杆。对于此外的那些电话线,FJ需要为它们付的费用,等于其中最长的电话线的长度(每根电话线仅连结一对电话线杆)。如果需要连结的电话线杆不超过K对,那么FJ的总支出为0

请你计算一下,FJ最少需要在电话线上花多少钱。

输入(phoneline.in)

* 1: 3个用空格隔开的整数:NP,以及K

* 2..P+1: i+1行为3个用空格隔开的整数:A_iB_iL_i

输出(phoneline.out)

* 1: 输出1个整数,为FJ在这项工程上的最小支出。如果任务不可能完成,输出-1

样例输入

5 7 1 1 2 5 3 14 2 4 8 3 2 3 5 2 9 3 4 7 4 5 6

样例输出

4

依旧很多废话,但这道题饶了几个弯,废话中还是有些信息的,要用到二分,但这道题确实不怎么懂。。



### 回答1: 以下是一个简单的 Python 代码示例,用于实现大鱼小鱼的游戏: ```python import random import turtle # 设置窗口大小和标题 window = turtle.Screen() window.title("大鱼小鱼") window.setup(600, 600) # 创建大鱼 big_fish = turtle.Turtle() big_fish.shape("turtle") big_fish.color("blue") big_fish.penup() big_fish.speed(0) # 创建小鱼 small_fish = turtle.Turtle() small_fish.shape("circle") small_fish.color("red") small_fish.penup() small_fish.speed(0) small_fish.goto(random.randint(-250, 250), random.randint(-250, 250)) # 创建食物 food = turtle.Turtle() food.shape("triangle") food.color("green") food.penup() food.speed(0) food.goto(random.randint(-250, 250), random.randint(-250, 250)) # 设置键盘监听 def move_up(): big_fish.setheading(90) big_fish.forward(10) def move_down(): big_fish.setheading(270) big_fish.forward(10) def move_left(): big_fish.setheading(180) big_fish.forward(10) def move_right(): big_fish.setheading(0) big_fish.forward(10) window.listen() window.onkeypress(move_up, "Up") window.onkeypress(move_down, "Down") window.onkeypress(move_left, "Left") window.onkeypress(move_right, "Right") # 游戏循环 while True: # 小鱼和食物的随机移动 small_fish.forward(random.randint(1, 5)) small_fish.left(random.randint(-30, 30)) food.forward(random.randint(1, 5)) food.left(random.randint(-30, 30)) # 大鱼小鱼 if big_fish.distance(small_fish) < 20: small_fish.goto(random.randint(-250, 250), random.randint(-250, 250)) # 大鱼食物 if big_fish.distance(food) < 20: food.goto(random.randint(-250, 250), random.randint(-250, 250)) # 边界检测 if big_fish.xcor() > 300 or big_fish.xcor() < -300: big_fish.right(180) if big_fish.ycor() > 300 or big_fish.ycor() < -300: big_fish.right(180) ``` 运行该代码,即可开始玩大鱼小鱼的游戏。通过键盘上下左右箭头控制大鱼的移动,尽可能掉小鱼和食物,避免碰到边界。 ### 回答2: Python是一种强大的编程语言,可以用来编写各种各样的应用程序,包括小游戏。大鱼小鱼是一个简单而有趣的游戏,我们可以使用Python来编写它。 首先,我们需要创建一个游戏窗口。我们可以使用Python的pygame库来实现这一点。通过设置窗口的大小和标题,我们可以创建一个适合游戏的界面。 接下来,我们需要定义游戏角色——大鱼和小鱼。我们可以使用Python的类来表示它们。大鱼可以根据玩家的输入来移动,而小鱼则会随机游动。 我们还需要定义一些游戏规则。例如,当大鱼掉小鱼时,玩家得分增加。另外,如果大鱼和小鱼相撞,则游戏结束。 游戏的主要逻辑可以放在一个主循环中。在每个循环中,我们可以处理玩家的输入,更新游戏角色的位置,检查是否发生碰撞,并更新游戏分数。 最后,我们可以添加一些图形和音效来增强游戏体验。使用Python的pygame库,我们可以加载图像和音频文件,并在适当的时候播放它们。 通过以上步骤,我们就可以完成一个简单的大鱼小鱼游戏。当玩家操作大鱼掉尽可能多的小鱼时,游戏会变得越来越有趣和具有挑战性。Python的简洁性和易用性使得编写这样的小游戏变得轻而易举。 ### 回答3: Python编写大鱼小鱼的游戏,可以使用pygame库来实现游戏界面的绘制和交互操作。以下是一个简单的示例代码: ```python import pygame import random # 初始化pygame pygame.init() # 设置游戏窗口的大小 screen_width = 800 screen_height = 600 screen = pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("大鱼小鱼") # 加载游戏资源 background = pygame.image.load("background.png") fish1 = pygame.image.load("fish1.png") fish2 = pygame.image.load("fish2.png") fish3 = pygame.image.load("fish3.png") # 设置鱼的初始位置和速度 fish_x = 400 fish_y = 300 fish_speed = 5 # 生成小鱼的初始位置和速度 small_fish_x = random.randint(0, screen_width) small_fish_y = random.randint(0, screen_height) small_fish_speed = 3 # 游戏循环 running = True while running: screen.blit(background, (0, 0)) # 绘制背景 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False keys = pygame.key.get_pressed() if keys[pygame.K_UP]: fish_y -= fish_speed if keys[pygame.K_DOWN]: fish_y += fish_speed if keys[pygame.K_LEFT]: fish_x -= fish_speed if keys[pygame.K_RIGHT]: fish_x += fish_speed # 判断大鱼是否到小鱼 if abs(fish_x - small_fish_x) < 50 and abs(fish_y - small_fish_y) < 50: small_fish_x = random.randint(0, screen_width) small_fish_y = random.randint(0, screen_height) screen.blit(fish1, (fish_x, fish_y)) # 绘制大鱼 screen.blit(fish2, (small_fish_x, small_fish_y)) # 绘制小鱼 pygame.display.flip() # 更新显示 # 退出游戏 pygame.quit() ``` 在游戏中,使用上下左右方向键来控制大鱼的移动。当大鱼和小鱼的位置重叠时,说明大鱼到了小鱼,随机生成一个新的小鱼的位置。游戏循环不断地更新画面并响应玩家的操作,直到玩家退出游戏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值