2023牛客暑期多校训练营4(题解&补题)

A题(字符串处理和使用find()函数)

链接:登录—专业IT笔试面试备考平台_牛客网牛客网是互联网求职神器,C++、Java、前端、产品、运营技能学习/备考/求职题库,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://ac.nowcoder.com/acm/contest/57358/A

题意:给定01串 s , 找出01串 t ,其中 t 满足在串 s + t + s 中,s串仅出现两次。

思路:我们可以由题目看出,我们只需要找全0串或者全1串即可,因为如果在 s000..s中,除了开头两个 s 之外中间还出现过 s ,那么一定是需要 0 的, 我们只需要全是 1 即可,反之亦然。

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#include<unordered_map>
#include<set>
#include<stack>
#include<cmath>
#include<unordered_set>

//#define int unsigned long long
#define int long long

using namespace std;

const int N = 1010, P = 131;

void solve()
{
	int n;
	string s;
	
	cin >> n >> s;
	
	int ze = 0, on = 0;
	
	for (int i = 0; i < s.size(); ++ i)
	{
		if(s[i] == '0') ze = 1;
		else on = 1;
		if(on && ze) break;
	}
	
	if(ze && !on) 
	{
		for (int i = 0; i < n; ++ i) cout << 1;
	}
	else if(!ze && on)
	{
		for (int i = 0; i < n; ++ i) cout << 0;
	}
	else 
	{
		string z = "";
		
		for (int i = 0; i < n; ++ i) z += "0";
		
		string a = " " + s + z + s;
		a.erase(a.begin() + 1);
		a.erase(a.end() - 1);
		
		
		if(a.find(s) == string::npos) cout << z;
		else 
		{
		    for (int i = 0; i < n; ++ i) cout << 1;
		}
	}
	
	cout << endl;
}

signed main()
{
	ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
	
	int T;
	cin >> T;
	
	while(T--)
	{
		solve();
	}
	
	return 0;
}

F题(可模拟,考中我使用了二分(其实没必要))

链接:登录—专业IT笔试面试备考平台_牛客网牛客网是互联网求职神器,C++、Java、前端、产品、运营技能学习/备考/求职题库,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://ac.nowcoder.com/acm/contest/57358/F

题意:题意就是给一个序列每次选和他绝对值差最大的去除,有相等的取右边的值。

思路:我们可以看到,本题每次去除的,其实就是数组的最小或最大,那么我们直接判断谁的票多即可,赛后发现其实直接求处理中位数即可,赛中我使用的是二分来判断。

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#include<unordered_map>
#include<set>
#include<stack>
#include<cmath>
#include<unordered_set>
#define int long long

using namespace std;

const int N = 1e6 + 10;

int a[N];
unordered_map<int, int> ans;

void solve()
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; ++ i)
	{
		cin >> a[i];
		ans[a[i]] = i;
	}
	
	sort(a + 1, a + n + 1);
	
	if(n <= 2) cout << 1 << endl;
	else
	{
		int he = 1, ta = n;
		while(he + 1 <= ta - 1)
		{
			int l = he + 1, r = ta - 1;
			
			while(l < r)
			{
				int mid = l + r + 1 >> 1;
				if(a[ta] - a[mid] >= a[mid] - a[he]) l = mid;
				else r = mid - 1;
			}
			if(a[ta] - a[l] < a[l] - a[he]) l --;
			if(l - he + 1 >= ta - l) ta --;
			else he ++;
		}
		cout << ans[a[he]];
	}
}

signed main()
{
	ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
	
//	int T;
//	cin >> T;
	
//	while(T--)
//	{
		solve();
//	}
	
	return 0;
}

L题(思维)

链接:登录—专业IT笔试面试备考平台_牛客网牛客网是互联网求职神器,C++、Java、前端、产品、运营技能学习/备考/求职题库,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://ac.nowcoder.com/acm/contest/57358/L

题意:有一组 n 行 m 列的灯,最初灯都是关的。有q 次操作,每次操作为:①打开第 i 行的灯;②关掉第 i 行的灯;③打开第 i 列的灯;④关掉第 i 列的灯。问最终亮着的灯有多少盏?

思路:我们知道,如果对于同一盏灯,无论前面对他进行过多少开关处理,只有最后一个影响到它的处理有用,所以我们直接逆序遍历即可。

代码:

#include <iostream>

using namespace std;

const int N = 1e6+10;

struct Node{
    string op1,op2;
    int x;
}node[N];

int st1[N],st2[N];

int main()
{
    int n, m, q;
    cin>>n>>m>>q;
    for(int i=1;i<=q;i++){
        cin>>node[i].op1>>node[i].x>>node[i].op2;
    }
    long long ans=0;
    for(int i=q;i;i--){
        if(node[i].op1=="row"){
            if(!st1[node[i].x]){
                st1[node[i].x]=1;
                if(node[i].op2=="on"){
                    ans+=m;
                }
                n--;
            }
        }else{
            if(!st2[node[i].x]){
                st2[node[i].x]=1;
                if(node[i].op2=="on"){
                    ans+=n;
                }
                m--;
            }
        }
    }
    cout<<ans;
    return 0;
}

VSCode和PyCharm是两种常用的集成开发环境(IDE),用于编写和运行Python程序。它们在某些方面有相似之处,但也有一些区别。 引用\[1\]中提到,VSCode和PyCharm在编写Python程序方面基本相同。VSCode在输入代码时会自动提示函数,而PyCharm的某些版本可能没有这个功能。此外,它们都可以通过点击运行按钮来执行程序。 引用\[2\]中提到,有些人更喜欢使用VSCode来编写ESP-IDF工程(C语言项目),因为VSCode是免费的,而CLion需要付费。虽然他们可能不使用VSCode的编译环境,但可以使用VSCode来查看整个项目的工程结构,并在ESP-IDF命令行终端中使用命令进行编译。 引用\[3\]中提到,VSCode的Jupyter Notebook功能非常受欢迎。它可以创建个代码块,并使用不同的内核执行这些代码块。如果你不想一直创建新的代码文件,但又不想在查看和移植代码时遇到麻烦,或者只想在一个文件中进行学习并随时更新代码,那么使用Jupyter Notebook是一个不错的选择。 总结来说,VSCode和PyCharm都是功能强大的IDE,用于编写和运行Python程序。它们在某些方面有相似之处,但也有一些区别,如自动提示函数、适用于不同类型的项目和使用Jupyter Notebook等功能。选择使用哪个取决于个人的偏好和项目需求。 #### 引用[.reference_title] - *1* [vscode对比pycharm:花落谁家](https://blog.youkuaiyun.com/weixin_48553762/article/details/109014996)[target=&quot;_blank&quot; data-report-click={&quot;spm&quot;:&quot;1018.2226.3001.9630&quot;,&quot;extra&quot;:{&quot;utm_source&quot;:&quot;vip_chatgpt_common_search_pc_result&quot;,&quot;utm_medium&quot;:&quot;distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt&quot;}} ] [.reference_item] - *2* *3* [Python第三方库安装&mdash;&mdash;使用vscode、pycharm安装Python第三方库](https://blog.youkuaiyun.com/qq_53381910/article/details/129868758)[target=&quot;_blank&quot; data-report-click={&quot;spm&quot;:&quot;1018.2226.3001.9630&quot;,&quot;extra&quot;:{&quot;utm_source&quot;:&quot;vip_chatgpt_common_search_pc_result&quot;,&quot;utm_medium&quot;:&quot;distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt&quot;}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dawpro_加薪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值