欢乐赛28TJ
2024-09-16 10:41:39
发布于:浙江
T1
4数最大值 跳转
四个数打表枚举都能做...不会只好种田
不是,这表情包咋这么大啊....
#include<bits/stdc++.h>
using namespace std;
int a,maxx=-1;
int main()
{
for(int i=0;i<4;i++)
{
cin>>a;
maxx=max(a,maxx);
}
cout<<maxx;
return 0;
}
T2 数学韩束白蛮腰函数跳转
这题的所有函数C++里都有,so
偷鸡狂喜
代码如下:
#include<bits/stdc++.h>
using namespace std;
string a;
double b;
int main()
{
cin>>a>>b;
if(a=="ceil")
{
cout<<ceil(b);
}
else if(a=="floor")
{
cout<<floor(b);
}
else
{
cout<<round(b);
}
return 0;
}
T3 支付成功失败跳转
一道求和的题目,简单qwq有谁被long long恶搞了捏?
代码如下:
#include<bits/stdc++.h>
using namespace std;
long long n,x,sum=0;
int main()
{
cin>>n>>x;
for(int i=0;i<n;i++)
{
int a;
cin>>a;
sum+=a;
if(sum>x)//支付失败qwq
{
cout<<"NO";
return 0;
}
}
cout<<"YES";
return 0;
}
T4 任务-宝石跳转
每个人都要不同,又要求至少,所以该怎么拿呢?
诶诶诶诶!对对对!那个同学说对了就是1-n!!无中生友没人看得见对吧
可以证明,给1-n的挑战者1-n的宝石是最优策略,同时,一个一个算会算出大量重复部分,所以我们可以记住上一个挑战者的宝石数
#include<bits/stdc++.h>
using namespace std;
int n;
long long sum;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
sum+=i;
}
cout<<sum;
return 0;
}
T5 埃利亚(就是这个名字doge)的任务跳转
T4的改进版本,把上一次的代码复制过来之后做累加就可以了,此处不多赘述
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n;
long long a[101]={0,1};
long long b[101]={0,1};//二次累加数组
int main()
{
cin>>n;
for(int i=2;i<=n;i++)
{
a[i]=a[i-1]+i;
b[i]=b[i-1]+a[i];
}
cout<<b[n];
}
T6 最大”银“盘
跳转
硬盘制造商使用十进制单位是为了使标注的容量看起来更大,但计算机系统中实际使用的是二进制单位 出题人不阴?!
一道狠简单的结构体排序doge
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n;
struct node
{
long long aa;
string lx;
long long b;
}a[101];
bool cmp(node a,node b)
{
return a.b>b.b;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i].aa>>a[i].lx;
if(a[i].lx=="MB")
{
a[i].b=a[i].aa/1000;//发现猫腻了吗doge
}
else if(a[i].lx=="KB")
{
a[i].b=a[i].aa/1000/1000;
}
else if(a[i].lx=="B")
{
a[i].b=a[i].aa/1000/1000/1000;
}
else
{
a[i].b=a[i].aa;
}
}
sort(a,a+n,cmp);
cout<<a[0].aa<<" "<<a[0].lx;
return 0;
}
T7找到OGCA跳转
这道题只要序列,顺序不变即可,具体实现方法如下:
#include<bits/stdc++.h>
using namespace std;
string a;
bool f1,f2,f3,f4;
int main()
{
cin>>a;
for(int i=0;i<a.size();i++)
{
if(!f1 && a[i]=='a')
{
f1=true;
}
else if(f1 && a[i]=='c')
{
f2=true;
}
else if(f2 && a[i]=='g')
{
f3=true;
}
else if(f3&&a[i]=='o')
{
f4=true;
}
}
if(f1&&f2&&f3&&f4)
{
cout<<"YES";
}
else
{
cout<<"NO";
}
return 0;
}
T8 dio失的数据跳转
这道题想一下:直接算丢失的数未免不现实,毕竟人家换了个数替代,丢了哪个数咱甚至都不知道
BUT
换个角度思考:我们的总数和出现的数是知道的,我们通过排序,可以同时算出这两个数据,相减即可!仅需O(N)!!!
上代码!
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
long long k;
cin>>k;
vector<long long>sz;
sz.push_back(9223372036854775807);//后面排序后可起到终止累加的作用
for(int i=0;i<n;++i)
{
long long x;
cin>>x;
sz.push_back(x);
}
long long sum1=((k+1)*k)/2,sum2=0;//等差数列,提前把总数算出来。优化
sort(sz.begin()****z.end());
for(int i=1;i<=n;++i)
{
if(sz[i]==sz[i-1])
{
continue;
}
if(sz[i]>k) //前面那个超大数的作用
{
break;
}
sum2+=sz[i];
}
cout<<sum1-sum2;
}
给个赞吧QQL
这里空空如也
有帮助,赞一个