2026.03.27(第三天)

练习题

3

答案

cpp 复制代码
#include <stdio.h>

/************found************/

fun (char *a) {

         if (*a) {

                   fun(a + 1);

                   /************found************/

                   printf("%c",*a);

         }

}

int main() {

         char s[100] = {0};

         gets(s);

         fun(s);

         return 0;

}

注意事项

  • 注意错误可能很简单,比如说一个逗号一个分号。

13

答案

cpp 复制代码
#include  <stdio.h>

#define N 15

int main() {

	int a[N][N] = {0}, i, j, k, m, n;

	scanf("%d", &n);

	if (n % 2 == 0)

		m = n / 2 ;

	else

        /**********found**********/

		m = (n+1)/2;

	for (i = 0; i < m; i++) {

		/**********found**********/

		for (j = i ; j < n - i; j++)

			a[i][j] = a[n - i - 1][j] = i + 1;

		for (k = i + 1; k < n - i; k++)

			/**********found**********/

			a[k][i] = a[k][n - i - 1] = i+1;

	}

	for (i = 0; i < n; i++) {

		for (j = 0; j < n; j++)

			printf("%3d", a[i][j]);

		printf("\n");

	}

	return 0;

}

注意事项

  • 填空题要注意上下文。

23

答案

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
/*你的王国里有一条n个头的恶龙,你希望雇佣一些骑士把它杀死(也就是砍掉所有的头)。
村里有m个骑士可以雇佣,一个能力值为 x 的骑士可以砍掉恶龙一个直径不超过 x 的头,且需要报酬 x 个金币。
如何雇佣骑士才能砍掉恶龙所有的头,并且支付最小的金币?
注意,一个骑士只能砍一个头并且仅能被雇佣1次。
输入说明
输入包含多组测试数据。
每组测试数据的第一行输入两个整数n和m(m和n都在1到20000 之间), n表示龙拥有的头的数目 , m表示王国中的骑士数。
接下来的 n 个整数为龙头的直径,再接下来m个整数为骑士的能力值。
输出说明
对于每组测试数据, 输出一行包含国王杀死龙需要支付的最低数量的金币。如果骑士不可能杀死龙, 输出一行:
"Lose!"(输出不包含引号)*/
int main(){
	int n,m;
	while(cin>>n>>m){
		vector<int> N(n);
		vector<int> M(m);
		for(int i=0;i<n;i++){
			cin>>N[i];
		}
		for(int i=0;i<m;i++){
			cin>>M[i];
		}
		sort(N.begin(),N.end());
		sort(M.begin(),M.end());
		int coin=0;
		int k=0;
		for(int i=0;i<n;i++){
			while(N[i]>M[k]&&k<m){
				k++;
			}
			if(k<m){
				coin+=M[k];
				k++;
			}else{
				coin=-1;
				break;
			}
		}
		if(coin==-1){
			cout<<"Lose!"<<endl;
		}else{
			cout<<coin<<endl;
		}
		
	}
	return 0;
}

注意事项

  • 注意骑士斩杀恶龙之后,骑士指针k要+1。

33

答案

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
/*给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),
如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。
输入说明
  第一行一个数字L。
  第二行是字符串S。
  L大于0,且不超过S的长度。
  n<=60
  S中所有字符都是小写英文字母。
输出说明
  一行,题目要求的字符串。
  输入样例1:
  4
  bbaabbaaaaa
  输出样例1:
  bbaa
  输入样例2:
  2
  bbaabbaaaaa
  输出样例2:
  aa*/
int main(){
	int L;
	cin>>L;
	string S;
	cin>>S;
	int n=S.length();
	string ans="";
	int bestcnt=-1;
	int bestpos=n;
	for(int i=0;i<n;i++){
		for(int len=L;i+len<n;len++){
			string sub=S.substr(i,len);
			
			int cnt=0;
			int firstpos=-1;
			
			for(int j=0;j+len<n;j++){
				if(S.substr(j,len)==sub){
					cnt++;
				}
				if(firstpos==-1)firstpos=j;
			}
			if(cnt>bestcnt||(cnt==bestcnt&&len>(int)ans.length())||
			(cnt==bestcnt&&len==(int)ans.length()&&firstpos<bestpos)){
				ans=sub;
				bestcnt=cnt;
				bestpos=firstpos;
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}

注意事项

  • 注意这里采用暴力枚举是因为n<60。

43

答案

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
/*给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
注意,由于存在相等的元素,因此,第2大的数可能和第1大的数相等。
输入说明
第一行包含一个数n,表示序列长度。
第二行包含n个正整数,表示给定的序列。
第三个包含一个正整数m,表示询问个数。
接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。
n,m<=1000;
保证k<=(r-l+1),序列中的数<=106。
输出说明
总共输出m行,每行一个数,表示询问的答案。*/
int main(){
	int n,m;
	cin>>n;
	vector<int> N(n);
	for(int i=0;i<n;i++){
		cin>>N[i];
	}
	cin>>m;
	for(int i=0;i<m;i++){
		int l,r,k;
		cin>>l>>r>>k;
		vector<int> T;
		for(int j=l-1;j<r;j++){
			T.push_back(N[j]);
		}
		sort(T.begin(),T.end(),greater<int>());
		cout<<T[k-1]<<endl;
	}
	return 0;
}

注意事项

  • 注意sort函数的语法。

53

答案

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
/*s01串初始为"0"
按以下方式变换:
0变1,1变01
所以,变换规律如下:
1次变换后:1;
2次变换后:01;
3次变换后:101;
4次变换后:01101;
5次变换后:10101101;
......
输入说明
输入1个整数n,范围为0<=n<=19,表示变换的次数
输出说明
n次变换后的s01串,行首行尾无空格,也无空行。*/
int main(){
	int n;
	cin>>n;
	string a="0";
	for(int i=1;i<=n;i++){
		string res="";
		for(int j=0;j<a.length();j++){
			if(a[j]=='0'){
				res+="1";
			}else{
				res+="01";
			}
		}
		a=res;
	}
	cout<<a<<endl;
	return 0;
}

注意事项

  • 注意对比字符串中的数字时需要用到字符型的数字。

63

答案

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
/*输入说明
  输入包含n+2行:
  第1行包括一个整数w,为每组纪念品价格之和的上限。
  第2行为一个整数n,表示购来的纪念品的总件数。
  第3~n+2行每行包含一个正整数pi (5 <= pi <= w),表示所对应纪念品的价格。
  1 <= n <= 30000, 80 <= w <= 200
输出说明
  输出仅一行,包含一个整数,即最少的分组数目。*/
int main(){
	int w,n;
	cin>>w>>n;
	vector<int> pi(n);
	for(int i=0;i<n;i++){
		cin>>pi[i];
	}
	sort(pi.begin(),pi.end());
	int left=0;
	int right=n-1;
	int count=0;
	while(left<right){
		if(pi[left]+pi[right]<=w){
			count++;
			left++;
			right--;
			continue;
		}
		count++;
		right--;
	}
	if(left=right){
		count++;
	}
	cout<<count<<endl;
	return 0;
}

注意事项

  • 注意left和right相等的情况。
  • 注意if中的==不要写错。

英语翻译

  • 预训练模型已经在现代人工智能领域成为了一个重要的模型,这些模型都是在大规模数据集上进行第一次训练来学习大概的表针,然后在特殊的下列任务中进行微调的这种方式显著的减少了被标签的数据的需要,并且提升了模型的表现,在自然语言处理领域向BERT和GPT这样的模型都是使用自监督学习目标进行预训练的。微调使得这些模型能够适应例如文本分类情感分析和问题回答等任务。迁移学习通过把知识从一个领域迁移到另一个领域在这个处理中发挥了一个重要的作用。不考虑他们的效率,训练模型要求大量的计算资源,这产生了有关效率和环境影响的问题。
相关推荐
sali-tec2 小时前
C# 基于OpenCv的视觉工作流-章44-直线卡尺
图像处理·人工智能·opencv·算法·计算机视觉
Magic--2 小时前
经典概率题:飞机座位分配问题(LeetCode 1227)超详细解析
算法·leetcode·职场和发展
urkay-2 小时前
Android 图片轮廓提取与重叠轮廓合并处理
android·算法·iphone
七七肆十九2 小时前
PTA 7-38 数列求和-加强版
数据结构·算法
SWAGGY..2 小时前
【C++初阶】:(5)内存管理
java·c++·算法
Zarek枫煜2 小时前
zig与C3的算法 -- 桶排序
c语言·嵌入式硬件·算法
Rooting++3 小时前
C语言中的共用体应用场景
算法
liulilittle3 小时前
SQLite3增删改查(C
c语言·开发语言·数据库·c++·sqlite
CVer儿3 小时前
c++的移动语义
c++