2022CUST程序设计天梯赛校赛(L1题解)

2022CUST程序设计天梯赛校赛(正式赛)(L1题解)
本垃圾只会写L1题解…
L1-1
输出就行了…

#include<iostream>
using namespace std;
int main()
{
	cout<<"CUST fighting!"<<'\n';
}

L1-2
注意题目有n%2==1
所以无论如何取 Alice都是赢的只需要输出即可

#include<iostream>
using namespace std;
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		long long  n;
		cin>>n;
		cout<<"Alice"<<'\n';
	}
}

L1-3
差分数组模板题了解一下差分即可

#include<iostream>
#include<string.h>
using namespace std;
const int maxn=1e6+100;
int a[maxn];
int main()
{
	int n,l;
	cin>>n>>l;
	memset(a,0,sizeof a);
	for(int i=1;i<=n;i++)
	{
		int first,second;
		cin>>first>>second;
		a[first]+=1;
		a[second]+=-1;
	}
	long long ans=0;
	
	for(int i=1;i<=l;i++)
	{
		bool flag=0;
		if(a[i]!=0&&a[i]+a[i-1]==0) flag=1;
		a[i]+=a[i-1];
		if(a[i]||flag) 
		{
			ans++;
		}
		
		
	}
	cout<<ans<<'\n';
}

L1-4
大模拟

#include<iostream>
#include<string.h>
using namespace std;
const int maxn=110;
string s[maxn];
int main()
{
	int n;
	cin>>n;
	getchar();
	for(int i=1;i<=n;i++)
	getline(cin,s[i]);
	long long ans=0;
	for(int i=1;i<=n;i++)
	{
		bool flag=0;
		string str="small bottle";
		string::size_type u=s[i].find(str);
		if(u!=string::npos) flag=1;//在s[i]中找到str
		if(flag) continue; 
		int j;
		for(j=s[i].length();j>=0;j--)
		{
			if(s[i][j]==':') break;
		}
		j++;
		int temp=0;
		while(j<s[i].length())
		{
			temp*=10;
			temp+=s[i][j]-'0';
			j++;
			
		}
		ans+=temp;
		
	}
	cout<<ans<<'\n';
}

L1-5
若有公共质因子 因此gcd(a,b)>1
算数基本定理:
任何一个大于1的自然数N,可以唯一分解成有限个质数的乘积
而n最大为1000只需暴力即可

#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=1100;
int a[maxn];
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	cin>>a[i];
	int i;
	for(i=1;i<=n;i++)
	{
		bool flag=0;
		for(int j=i-1;j>=1;j--)
		{
			if(__gcd(a[i],a[j])>1)
			{flag=1;break;}
		}
		if(flag) break;
	}
	if(i==n+1) cout<<"cai ji hu zhuo!"<<'\n';
	else 
	{
		if(i&1) cout<<"B"<<'\n'<<i<<'\n';
		else cout<<"A"<<'\n'<<i<<'\n';
	}
}

L1-6
模拟
每次计算一下值然后存一下就行
记得开long long

#include<iostream>
#include<string.h>
using namespace std;
const int maxn=310;
const int maxm=25;
int b[maxm][maxm];
int a[maxn][maxn];
long long c[maxn][maxn];
int n,m;
long long jisuan(int x,int y)
{
	long long sum=0;
	for(int i=x,p=1;i<=x+m,p<=m;i++,p++)
	{
		for(int j=y,f=1;j<=y+m,f<=m;j++,f++)
		{
			sum+=1ll*b[p][f]*a[i][j];
		}
	}
	return sum;
}
signed main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=m;i++)
	for(int j=1;j<=m;j++)
	cin>>b[i][j];
	for(int i=1;i<=n-m+1;i++)
	{
		for(int j=1;j<=n-m+1;j++)
		{
			c[i][j]=jisuan(i,j);
		}
	}
	cout<<n-m+1<<'\n';
	for(int i=1;i<=n-m+1;i++)
	{
		for(int j=1;j<=n-m+1;j++)
		{
			if(j!=n-m+1)
			cout<<c[i][j]<<' ';
			else cout<<c[i][j];
		}
		cout<<'\n';
	}
}

L1-7
模拟
记录一下即可
记得保留两位小数

#include<iostream>
#include<algorithm>
#include<iomanip>
using namespace std;
const int maxn=1e5+100;
string s[15];
struct node{
	int id;
	string name;
	double acc;
}f[maxn];
bool cmp(node a,node b)
{
	if(a.acc!=b.acc)
	return a.acc>b.acc;
	else if(a.acc==b.acc) 
	{
		return a.id>b.id;
	}
}
int main()
{
	int n,m,x;
	cin>>n>>m>>x;

	int po1,po2,po3;
	for(int i=1;i<=m;i++)
	{
		cin>>s[i];
		if(s[i]=="id")
		po1=i;
		else if(s[i]=="name")
		po2=i;
		else if(s[i]=="accuracy")
		po3=i;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			string temp;
			if(j==po1)
			cin>>f[i].id;
			else if(j==po2)
			cin>>f[i].name;
			else if(j==po3)
			{
			cin>>f[i].acc;
			}
			else cin>>temp;
		}

	}
	sort(f+1,f+n+1,cmp);
	for(int i=1;i<=x;i++)
	{
		cout<<f[i].id<<' '<<f[i].name<<' '<<fixed<<setprecision(2)<<f[i].acc<<'\n';
	}

}

L1-8
模拟
主要是把时间转化为秒然后比较即可

#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=1100;
string na[maxn];
int dep[maxn];
int roun[maxn];
int roundmax=-1,roundmaxpo;
float speed[maxn];
float speedmax=-1.0;int speedmaxpo;
int depmin=1e9+100,depminpo;
float s[maxn];
float smax=-1.0;int smaxpo;
string tie[maxn];
string tiemax;int tiemaxpo;
int n;
int tra(int i,int x,string a)
{
	int temp1=0;
	while(x<=i)
	{
		temp1*=10;
		temp1+=a[x]-'0';
		x++;
	}
	return temp1;
}//将字符串转化为数字
bool compare(string a,string b,int ji,int j2)
{
	int i;
	for(i=0;i<a.length();i++)
	if(a[i+1]==':') break;
	int j;
	for(j=0;j<b.length();j++)
	if(b[j+1]==':') break;
	int houra=tra(i,0,a);
	int hourb=tra(j,0,b);
	i++;
	j++;
	int x=i+1;
	int y=j+1;
	for(;i<a.length();i++)
	if(a[i+1]==':') break;
	for(;j<b.length();j++)
	if(b[j+1]==':') break;
	int mina=tra(i,x,a);
	int minb=tra(j,y,b);
	i++;
	j++;
	int aiu=i+1;
	int biu=j+1;
	for(;i<a.length();i++)
	if(a[i+1]==':') break;
	for(;j<b.length();j++)
	if(b[j+1]==':') break;
	//这个循环到最后了此时i=a.length(),j=b.length();
	//在减一下即可
	int seconda=tra(i-1,aiu,a);
	int secondb=tra(j-1,biu,b);
	double ans1=houra*3600*1.0+mina*60*1.0+seconda*1.0;
    double ans2=hourb*3600*1.0+minb*60*1.0+secondb*1.0;
    return ans1/ji<ans2/j2;
    
}

signed main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=6;j++)
		{
			if(j==1)
			cin>>na[i];
			else if(j==2)
			{
				cin>>s[i];
				if(s[i]>smax)
				{
					smax=s[i];
					smaxpo=i;
				}
			}
			else if(j==3)
			{
				cin>>tie[i];
				if(i==1) 
				{
					tiemax=tie[i];
					tiemaxpo=1;
				}
			}
			else if(j==4)
			{
				cin>>dep[i];
				if(dep[i]<depmin)
				{
					depmin=dep[i];
					depminpo=i;
				}
			}
			else if(j==5)
			{
				cin>>speed[i];
				if(speed[i]>speedmax)
				{
					speedmax=speed[i];
					speedmaxpo=i;
				}
			}
			else if(j==6)
			{
				cin>>roun[i];
				if(roun[i]>roundmax)
				{
					roundmax=roun[i];
					roundmaxpo=i;
				}
				if(i!=1&&compare(tie[i],tiemax,roun[i],roun[tiemaxpo]))
				{
					tiemax=tie[i];
					tiemaxpo=i;
				}
			}
		}
	}
	cout<<na[smaxpo]<<'\n';
	cout<<na[depminpo]<<'\n';
	cout<<na[speedmaxpo]<<'\n';
	cout<<na[roundmaxpo]<<'\n';
	cout<<na[tiemaxpo]<<'\n';

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值