- 李强凌 的博客
7月day3
- @ 2025-7-17 18:42:18
T1
题意
有N道菜,第i道菜的甜度为Ai,咸度为Bi。小k可以按任意顺序排列这些菜,并按排列后的顺序依次品尝。他会按照排列顺序吃菜,但一旦已吃菜品的总甜度超过X,或者总咸度超过Y,他就会停止进食。 求他最终吃下的最少可能菜数。
整体思路
首先排序A,B并遍历累加求和到s1和s2。直到满足s1>X或s2>Y,最后取其最小值。
题解
#include<bits/stdc++.h>
using namespace std;
long long n,d,g;
long long q1=0,q2=0,d1=0,o1=0;
bool cmp(int x, int y)
{
return x>y;
} //排序函数
long long a[200005],b[200005];//个道菜的糖咸度
int main() {
freopen("eat.in","r",stdin);
freopen("eat.out","w",stdout);
cin>>n>>d>>g;
for(long long i=1;i<=n;i++){
cin>>a[i];
}
for(long long i=1;i<=n;i++){
cin>>b[i];//TOD
}//输入
sort(a+1,a+n+1,cmp);
sort(b+1,b+n+1,cmp);//调用函数cmp
for(long long i=1;i<=n;i++){
q1+=a[i];
d1++;
if(q1>d){
break;//
}
}
for(long long i=1;i<=n;i++){
q2+=b[i];
o1++;
if(q2>g){
break;//TODO
}
} //判断计数(错点)
long long uq=min(d1,o1);//比大小
cout<<uq;
return 0;
}
T2
题意
纯一数是指十进制表示中所有数字均为1的整数。按升序排列的纯一数为1,11,111,…。 请找出第N小的可以表示为恰好三个纯一数之和的整数
整体思路
定义一个数组a={0,1,11,...},好模拟枚举纯一数; 三层for循环i,j,k。i<=13,j<=i,k<=j。i表示第一个纯一数的下标、j表示第二个纯一数的下标,k表示第三个纯一数的下标。为了不重复,j<=i并且k<=j。随后把a[i]+a[j]+a[k]录进ans[++r].这里a[i]是第一个纯一数,a[j]是第一个纯一数,a[k]是第一个纯一数,最后输出a[n]。
题解
#include<bits/stdc++.h>
using namespace std;
long long n;
long long ans[30000];
long long a[30000]= {0,1,11,111,1111,11111,111111,1111111,11111111,111111111,1111111111,11111111111,111111111111,1111111111111};
int main(){
cin>>n;
for(int i=1;i<=13;i++){
for(int j=1;j<=i;j++){
for(int k=1;k<=j;k++){
ans[++r]=a[i]+a[j]+a[k];//循环嵌套,统计纯一数
//TODO
}//TODO
}//TODO
}
cout<<ans[n];
return 0;//
}
T3
题意
给定一个正整数N。求满足以下条件的正整数对(A,B)的数量(A和B都不大于N):当A和B以十进制书写且没有前导零时,A的最后一位数字等于B的第一位数字,且A的第一位数字等于B的最后一位数字。
思路
1.将开头与开头,结尾与结尾相同的数字压入一个二维数组中;2.二层嵌套循环遍历满足条件的结果加人答案;
题解
#include<bits/stdc++.h>
using namespace std;
int n;
int d[300][300];
long long ans;
int main(){
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
string l=to_string(i);
long long k1=l.size();
long long k2=i;
k1-=1;
while(k1--){
k2/=10;
//TODO
}
d[k2][i%10]++;
//TODO
}
for(int i=1;i<=9;i++){
//TODO
for(int j=1;j<=9;j++){
//TODO
ans=ans+d[i][j]*d[j][i];
}
}
cout<<ans;
return 0;
}