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';
}