✅个人主页:程序猿追
✅系列专栏:算法合集
✅目前状态:创建Java学习之路(零基础到就业实战)系列,目前更新到JAVAWEB开发
✅作者简介:大家好,我是程序猿追,全栈领域新星创作者,算法爱好者,常在作者周榜排名前30,某不知名的 ACMer
✅推荐一款刷题面试找工作三不误的网站——牛客网
✅个人名言:不积跬步无以至千里,趁年轻,使劲拼,给未来的自己一个交代!
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。
他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。
请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题?
输入格式
输入一行包含三个整数 a,b和 n。
输出格式
输出一个整数代表天数。
数据范围
对于 50% 的评测用例,1≤a,b,n≤10^6
对于 100%的评测用例,1≤a,b,n≤10^18
输入样例:
10 20 99
输出样例:
8
题解代码如下:
#include
using namespace std;
typedef long long ll;
int main()
{
ll a,b,n,sum = 0;
scanf("%lld%lld%lld",&a,&b,&n);
ll flag = n / (a * 5 + b * 2);
n -= (a * 5 + b * 2) * flag;
sum += flag * 7;
if(n / a <= 5)
{
sum += n / a;
if(n / a == 5)
{
sum += (n - 5 * a) / b;
if((n - 5 * a) % b > 0) sum ++;
}
else if(n % a > 0)
{
sum ++;
}
}else
{
sum += 5 + (n - 5 * a) / b;
if((n - 5 * a) % b > 0)
{
sum ++;
}
}
printf("%lld",sum);
return 0;
}
爱丽丝要完成一项修剪灌木的工作。
有 NN 棵灌木整齐的从左到右排成一排。
爱丽丝在每天傍晚会修剪一棵灌木,让灌木的高度变为 0 厘米。
爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木。
当修剪了最右侧的灌木后,她会调转方向,下一天开始向左修剪灌木。
直到修剪了最左的灌木后再次调转方向。
然后如此循环往复。
灌木每天从早上到傍晚会长高 1 厘米,而其余时间不会长高。
在第一天的早晨,所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。
输入格式
一个正整数 N,含义如题面所述。
输出格式
输出 N 行,每行一个整数,第行表示从左到右第 i 棵树最高能长到多高。
数据范围
对于 30% 的数据,N≤10,
对于 100% 的数据,1
输入样例:
3
输出样例:
4
2
4
#include
using namespace std;
typedef long long ll;
ll fun(ll a,ll b,ll c)
{
if(a > c)
{
if(a > b)
return a;
else
return b;
}
else
{
if(c > b)
return c;
else
return b;
}
}
int main()
{
int n, i;
scanf("%d",&n);
for(i = 1; i <= n; i ++)
{
printf("%lld\n", fun(i, 2 * (n - i), 2 * (i - 1)));
}
return 0;
}
题目描述
给定n个整数a[1],a[2],...,a[n],求两两相乘再相加的和,即
S=a[1]·a[2]+a[1]·a[3]+...+a[1]·a[n]+a[2]·a[3]+...+a[2]·a[n]+...+a[n-1]·a[n]输入格式
第一行为正整数n,第二行为n个整数。
30%的数据:2≤n≤1000,1≤a[i]≤100。
100%的数据:2≤n≤200000,1≤a[i]≤1000。
输出格式
输出一个数字表示答案S。
输入样例
4
1 3 6 9
输出样例
117
#include
#include
using namespace std;
typedef long long ll;
const int N=200010;
int s[N];
int a[N];
int n;
int main()
{
cin >> n;
ll ans = 0;
for(int i = 1; i <= n; ++ i)
{
scanf("%d",&a[i]);
s[i] += s[i - 1] + a[i];
}
for(int i = n; i >= 1; i --)
{
ans += (ll) a[i] * s[i - 1];
}
printf("%lld",ans);
return 0;
}
题目描述
在ISO 国际标准中定义了A0 纸张的大小为1189mm × 841mm。
将A0 纸沿长边对折后为A1 纸,大小为841mm × 594mm。
在对折的过程中长度直接取下整(实际裁剪时可能有损耗)。
将A1 纸沿长边对折后为A2 纸,依此类推。
输入纸张的名称,请输出纸张的大小。输入格式
输入一行包含一个字符串表示纸张的名称。
该名称一定是A0、A1、A2、A3、A4、A5、A6、A7、A8、A9 之一。
输出格式
输出两行,每行包含一个整数,依次表示长边和短边的长度。
输入样例
样例1:
A0
样例2:
A1
输出样例
样例1:
1189
841
样例2:
841
594
#include
#include
using namespace std;
typedef long long ll;
int main()
{
string a;
cin >> a;
if(a == "A0") printf("1189\n841");
if(a == "A1") printf("841\n594");
if(a == "A2") printf("594\n420");
if(a == "A3") printf("420\n297");
if(a == "A4") printf("297\n210");
if(a == "A5") printf("210\n148");
if(a == "A6") printf("148\n105");
if(a == "A7") printf("105\n74");
if(a == "A8") printf("74\n52");
if(a == "A9") printf("52\n37");
return 0;
}
小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。
当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。
例如,2022 排在 409 前面,因为2022 的数位之和是6,小于 409 的数位之和13。
又如,6 排在 2022 前面,因为它们的数位之和相同,而 6 小于 2022。
给定正整数n,m,请问对 1 到 n 采用这种方法排序时,排在第 m 个的元素是多少?输入格式
输入第一行包含一个正整数n。
第二行包含一个正整数m。
30% 的评测用例,1 ≤ m ≤ n ≤ 300。
50% 的评测用例,1 ≤ m ≤ n ≤ 1000。
100%的评测用例,1 ≤ m ≤ n ≤ 10^6。输出格式
输出一行包含一个整数,表示答案。
输入样例
13
5
输出样例
3
数据范围与提示
1到13的排序为:1, 10, 2, 11, 3, 12, 4, 13, 5, 6, 7, 8, 9。第5个数为3。
#include
#include
#include
#include
using namespace std;
const int N = 1e6 + 5;
struct A{
int n1;
int n2;
bool operator < (const A a)const{
if(a.n2 != n2) return a.n2 > n2;
if(a.n2 == n2) return a.n1 > n1;
}
}a[N];
int main()
{
int n, m, k, sum;
cin >> n >> m;
for(int i = 1; i <= n; ++ i)
{
a[i].n1 = i;
k = a[i].n1;
sum = 0;
while(k)
{
sum += k % 10;
k /= 10;
}
a[i].n2 = sum;
}
sort(a + 1, a + n + 1);
cout << a[m].n1;
return 0;
}
(暴力写的)
给定一个长度为 n 的数列A1,A2,... , An 和一个非负整数 x。
给定 m 次查询, 每次询问能否从某个区间 [l, r] 中选择两个数使得他们的异或等于 x。输入格式
输入第一行包含三个整数n,m,x。
第二行包含n个整数A1,A2,...,An。
接下来m行,每行两个整数l,r表示询问区间[l, r]。
20%的测试数据:1≤n,m≤100;
40%的测试数据:1≤n,m≤1000;
100%的测试数据:1≤n,m≤100000,0≤x,Ai<2^20,1≤l≤r≤n;输出格式
对于每个询问, 如果该区间内存在两个数的异或为 x 则输出yes, 否则输出no。
输入样例
4 4 1
1 2 3 4
1 4
1 2
2 3
3 3
输出样例
yes
no
yes
no
#include
#include
using namespace std;
typedef unsigned long long ll;
const ll N = 100000 + 10;
int n;
ll arr[N] = {0};
ll brr[N] = {0};
int main()
{
int n, m, x;
scanf("%d%d%d",&n,&m,&x);
for(int i = 1; i <= n; i ++) scanf("%lld", &arr[i]);
while(m --)
{
ll l, r, ans = 0, flag = 0;
scanf("%lld%lld",&l,&r);
for(int i = l; i <= r; i ++)
{
for(int j = i + 1; j <= r; j ++)
{
ans = arr[i] ^ arr[j];
if(ans == x)
{
flag = 1;
break;
}
}
}
if(flag == 1) puts("yes");
else puts("no");
}
return 0;
}
算法对程序员来说及其重要,语言和开发平台不断变化,但是万变不离其宗的是那些算法和理论,依稀记得我那个玩的很好的一个学长(在大二就拿到了 offer),他告诉我想找一个好的工作,那刷题一定是必不可少的
现在算法刷题平台还是蛮多的,给大家介绍一个我认为与大厂关联最深的平台——牛客网