2021辽宁省大学生程序设计竞赛(热身赛)完结

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021辽宁省大学生程序设计竞赛(热身赛)完结相关的知识,希望对你有一定的参考价值。

为马上要来的ccpc省赛做准备,打一下其他省的热身赛玩玩

A: a+b+c【签到】


https://ac.nowcoder.com/acm/contest/22351/A

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
	int t; cin>>t;
	while(t--)
	{
		long long int a,b,c; cin>>a>>b>>c;
		cout<<a+b+c<<endl; 
	}
}

B: 辽宁的记忆【签到】


https://ac.nowcoder.com/acm/contest/22351/B

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
	int t; cin>>t;
	while(t--)
	{
		long long int a; cin>>a;
		cout<<a+1946<<endl;
	}
}

C: 爱书人的资料查询【KMP】


https://ac.nowcoder.com/acm/contest/22351#question
本想直接暴力,加O2等优化看可不可以莽过去。后来不行,那直接KMP板子走一波。

#include<bits/stdc++.h>
using namespace std;
int t,n;
string s[50],w;
long long int solve()
{
	for(int i=0;i<n;i++) s[i]="*"+s[i];
	w="*"+w;//让其下标从1开始,便于写
	long long int ans=0;
	for(int k=0;k<n;k++)
	{
		string a=s[k];
		string b=w;
		int ne[50]={0};
		int len1=a.size()-1;
		int len2=b.size()-1;
		for(int i=2,j=0;i<=len1;i++)
    	{
        	while(j&&a[i]!=a[j+1]) j=ne[j];
        	if(a[i]==a[j+1]) j++;
        	ne[i]=j;
    	}
    	for(int i=1,j=0;i<=len2;i++)
    	{
       	 	while(j&&b[i]!=a[j+1]) j=ne[j];
        	if(b[i]==a[j+1]) j++;
        	if(j==len1)
        	{
            	ans++;
            	j=ne[j];
        	}
    	}
	}
	return ans;
}
int main(void)
{
	cin>>t;
	while(t--)
	{
		scanf("%d",&n);
		for(int i=0;i<n;i++) cin>>s[i];
		cin>>w; 
		long long int cnt=solve();
		printf("%d\\n",cnt);
	}
	return 0;
}

D: 巧克力蛋糕【签到】


https://ac.nowcoder.com/acm/contest/22351/D
任意俩条边交一个点。故 C n 2 C_n^2 Cn2种可能

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
	int t; cin>>t;
	while(t--)
	{
		long long int n; cin>>n;
		cout<<n*(n-1)/2<<endl;
	}
}

E:香辣牛肉面【数论】


https://ac.nowcoder.com/acm/contest/22351/E
详细的题解
通过分析你会发现它本质求的一个[1,n]所有数的约数个数之和的问题
O(n)的做法 过不去得加速

#include<iostream>
using namespace std;
 
int main()
{
    int n,cnt=0;
    cin>>n;
    for(int i=1;i<=n;i++)//[1,n]中的所有数含有约数i的有n/i个(向下取整)
        cnt+=n/i;
    cout<<cnt<<endl;
    return 0;
}

加速法:(O(开根号n))可以过

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
int main()
{
	int t; cin>>t;
	while(t--)
    {
        LL n,ans=0;
    	scanf("%lld",&n);
    	for(LL i=1,j;i<=n;i=j+1)//节约时间
    	{	
        	j=n/(n/i);
        	ans+=(n/i)*(j-i+1);
    	}
    	printf("%lld\\n",ans);
    }
    return 0;
}

以上是关于2021辽宁省大学生程序设计竞赛(热身赛)完结的主要内容,如果未能解决你的问题,请参考以下文章

2021辽宁省大学生程序设计竞赛题解

2021年中国大学生程序设计竞赛 女生专场 - 热身赛 Problem C. 口算训练(质因子分解)

2021年中国大学生程序设计竞赛 女生专场 - 热身赛 Problem C. 口算训练(质因子分解)

2021年中国大学生程序设计竞赛 女生专场 - 热身赛 Problem C. 口算训练(质因子分解)

河南省第十三届大学生程序设计竞赛热身赛 C

2023 年“和鲸杯”辽宁省普通高等学校本科大学生计算机设计竞赛启动会顺利召开