SUM-2024成信大天梯赛

查看代码中有仔细的批注
L1-5 yihan的新函数
题解:(字符串)需要用到一个知识,整数与字符串之间的变换“to_string()”,字符串变成整数“stoll()”函数,还有”stoint()“等字符串变成其他类型的数;这道题还有一个坑点在于位数,奇数位和偶数位要判断,否则输出的答案也是错的。
题目如下:

实现代码:

点击查看代码
#include <bits/stdc++.h>
using namespace std;

int main() {
	int n;
	long long sum =0;
	int t =0;
	int l =0;
	cin>>n;
	while(n--)
	{
		l = 0;
		t=0;
		long long a;
		cin >> a;
		if(a%2==0)
			t=1;
		string a_str = to_string(a);//一个将其他类型转化成string类型
		int len = a_str.length();
		if(len%2==0)
		l=1;
		for (int i = 0; i < len; i++) {
			if (((t==1)&&((i+1)%2!=0)&&(l==0))||((t==1)&&((i)%2!=0)&&(l==1))||((t==0)&&(i+1)%2!=0)&&(l==1)||((t==0)&&(i)%2!=0)&&(l==0)) {
                  //这里判断找多少位
				a_str[i] = '0';
			}
		}
		sum+=stoll(a_str);//把string类型转化成ll类型
	//	cout<<stoll(a_str)<<endl;
	}
	
	cout << sum << endl;
	
	return 0;
}

L1-6 二进制
题解:考查知识点:(字符串—进位运算)这道题输入字符串然后从后往前计算,难点在于是否要一开始就补齐,还是直接遍历,第二个难点在于条件的判定,两个字符串什么时候循环停止,还有最后的输出,需要用到反转函数reverse();这里最关键在于遍历两个字符串加法的时候注意条件;
题目如下:

代码如下:

点击查看代码
#include <bits/stdc++.h>

using namespace std;

string addBinary(string a, string b) {
	int carry = 0;
	string result = "";
	
	int m = a.size(), n = b.size();
	int len = max(m, n);
	//一个for循环,时间复杂度很小
	for (int i = 0; i < len || carry; i++) {
		//注意这里的判断条件,小于两个的最大值,
		//或者carry不为空,因为有可能最后两个数都是1,需要进位。
		int sum = carry;
		if (i < m) {
			sum += a[m - 1 - i] - '0';
		}
		if (i < n) {
			sum += b[n - 1 - i] - '0';
		}
		
		result += to_string(sum % 2);
		//这里的字符串result从前往后加上对应每一位的二进制数
		carry = sum / 2;
		//记录是否进位
	}
	
	reverse(result.begin(), result.end());
	//反转字符串,输出从后往前,正确答案
	return result;
}

int main() {
	string a, b;
	cin >> a >> b;
	
	cout << addBinary(a, b) << endl;
	
	return 0;
}


L1-7 大山中的学院
题解:一个很简单的模拟,当时没写出来的原因是没有看这道题,只有一个点需要注意就是它的科技值的范围是10^9,需要unsing long long 去存放数据。
题目如下:


代码如下:

点击查看代码
#include <bits/stdc++.h>
using namespace std;
char mp[10100][10000];
unsigned long long v2[10100000];
unsigned long long v[10100][10100];
int xx[]={0,1,0,-1};
int yy[]={-1,0,1,0};
int ma;
int sum;
int ay,ax;
int main ()
{
	int n,m,t;
	cin>>n>>m>>t;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>mp[i][j];
		}
	}
	for(int i=1;i<=t;i++){
	cin>>v2[i];
	}
	int p=1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(mp[i][j]=='*')
			{
				if(p>=t)
					break;
				v[i][j]=v2[p];
				p++;
			}
		}
		if(p>=t)
			break;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(mp[i][j]=='-')
			{
				sum = 0;
				for(int k=0;k<=3;k++){
					int dx = i+xx[k];
					int dy =j+yy[k];
					sum+=v[dx][dy];
				}
				if(ma<sum)
				{
					ma=sum;
					ay=j;
					ax=i;
				}
			}
		}
	}
	 cout<<ax<<" "<<ay<<"\n";
	cout<<ma;
	
	return 0;
}

posted @ 2024-03-20 00:11  冬天的睡袋  阅读(31)  评论(0编辑  收藏  举报