C++学习笔记1

A. 求出那个数

题目描述

求出一个最小的正整数 xxx,使得 xxx 每位数字的和恰好为 nnn

输入格式

第一行一个正整数 TTT,代表测试数据的组数。

接下来 TTT 行每行一个正整数 nnn

  • 1≤T≤10001\le T\le10001T1000
  • 0≤n<10000\le n<10000n<1000

输出格式

对于每组输入,输出最小的 xxx

样例

输入 #1

2
5
14

输出 #1

5
59
  1. 尽量用 999,这样能使数位最小;
  2. nnn 不够 999 时,作为第一位输出;
  3. nnn000,特判输出 000
#include <bits/stdc++.h>
//#define int long long
using namespace std;



void solve()
{
   
   
	int n;
	cin >> n;
	if (n == 0)
	{
   
   
		printf("0\n");
		return ;
	}
	string s = "";
	while (n > 0) n -= 9,s += '9';
	cout << n + 9 << s.substr(0,s.size()-1) << '\n';
}

signed main()
{
   
   
	int TTT;
	cin >> TTT;
//	TTT = 1;
	while (TTT--) solve();
	return 0;
}

B. 田忌赛马·Easy

齐使者如梁,孙膑以刑徒阴见,说齐使。齐使以为奇,窃载与之齐。齐将田忌善而客待之。忌数与齐诸公子驰逐重射。孙子见其马足不甚相远,马有上、中、下辈。于是孙子谓田忌曰:“君弟重射,臣能令君胜。”田忌信然之,与王及诸公子逐射千金。及临质,孙子曰:“今以君之下驷与彼上驷,取君上驷与彼中驷,取君中驷与彼下驷。”既驰三辈毕,而田忌一不胜而再胜,卒得王千金。于是忌进孙子于威王。威王问兵法,遂以为师。

——「史记·孙子吴起列传第五」

在千年以前,孙膑就能靠着过人的智谋,通过巧妙地调整比赛的顺序,让三战皆背的田忌翻身成为两胜一败的赢家,也为自己赢得了别人的尊敬。在千年以后的今天,赛马依然是一项热门的娱乐活动,不过今天你要面对的却是更加困难的问题。

你和对手各自都有 NNN 匹马,要进行 NNN 场比赛。一匹马只能出场一次,同场比赛中速度快的马获得胜利。如果两匹马的速度一样的话,那么就是平局。你的对手会像齐王那样在第一场出速度最快的马,第二场出次快的马,…\dots,第 NNN 场出速度最慢的马。

而你为了获胜,当然会按照某种策略安排你的 NNN 匹马的出场顺序。除此之外,你还可以决定比赛的时间,全部 NNN 场比赛都会在你决定的那一天举行。在比赛之前,你为了获胜会不辞辛苦的训练你的每一匹马;而你的对手自我感觉良好,不会训练他的马。每一匹马的素质不同,我们用 aia_iai 来表示你的第 iii 匹马的速度。每经过一天的训练,你的马的速度就会增加 111

现在你拿到了对手的 NNN 匹马的资料,请你尽快计算训练的天数 MMM,以使得在第 M+1M+1M+1 天比赛的时候,你可以安排一个出场顺序使得你可以在全部的 NNN 场比赛中至少获胜 KKK 场。

输入格式

第一行给出一个正整数 TTT,代表测试数据的组数。

每组测试数据有 333 行,第一行有两个以空格分隔的数字 N,KN,KN,K,含义如题目种描述。

第二行有 NNN 个以空格分隔的正整数,第 iii 个数字代表你第 iii 匹马的速度 aia_iai

第三行有 NNN 个以空格分隔的正整数,第 jjj 个数字代表你对手第 jjj 匹马的速度 cjc_jcj

  • 1≤T≤301\le T\le301T30
  • 1≤K≤N≤1051\le K\le N\le 10^51KN105
  • 0≤ai,cj≤1090\le a_i,c_j\le 10^90ai,cj109

输出格式

对于每组测试数据输出一个非负整数 MMM,代表在第 M+1M+1M+1 天举办的赛马比赛中你可以至少赢得 KKK 场。

如果不止有一个 MMM 满足条件,请输出最小的那个。

样例

输入 #1

2
4 2
3 1 2 4
0 4 3 2
1 1
10
10

输出 #1

0
1
  1. M+1M+1M+1 天的时候,你的马匹的速度分别是 a1+M,a2+M,a3+M,…,an+Ma_1+M,a_2+M,a_3+M,\dots,a_n+Ma1+M,a2+M,a3+M,,an+M,需要派出最好的 KKK 匹马,对上对手最差的 KKK 匹马;
  2. 假设我们最好的 KKK 匹马是 a1≤a2≤a3≤⋯≤aka_1\le a_2\le a_3\le\dots\le a_ka1a2a3<
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值