1🐋🐋利刃华尔兹(黄金;模拟)
时间限制:1秒
占用内存:64M
🐟题目思路
2024年码蹄杯职业院校赛道决赛题解_哔哩哔哩_bilibili
🐟代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double a,b,k;
cin>>a>>b>>k;
//根据规则,4是固定伤害,什么时候用都可以,剩下的根据攻击次数和攻击力排序为1、2、3
double ans=500;
b+=b*0.2;
//使用技能1
ans+=a+0.9*b;
b+=b*0.2;
//使用技能2
ans+=a;
b+=b*0.2;
ans+=a+2*b;
b+=b*0.2;
//使用技能3
for(int i=0;i<4;i++){
ans+=a+5*b;
b+=b*0.2;
}
//cout<<ans<<" "<<k<<endl;
if(ans>=k) cout<<"You have slain an enemy";
else cout<<"You have been slain";
return 0;
}
2🐋🐋多项式输入(黄金;模拟)
时间限制:1秒
占用内存:64M
🐟题目思路
2024年码蹄杯职业院校赛道初赛第三场题解_哔哩哔哩_bilibili
🐟代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin>>n;
vector<int> a(n+5);
for(int i=n;i>=0;i--) cin>>a[i];
string s;
if(a[n]==-1){
s+="-x^";
s+=to_string(n);
}
else if(a[n]==1){
s+="x^";
s+=to_string(n);
}
else if(a[n]!=0){
s+=to_string(a[n]);
s+="x^";
s+=to_string(n);
}
for(int i=n-1;i>=1;i--){
if(a[i]==0) continue;
if(a[i]==-1){
if(i==1) s+="-x";
else{
s+="-x^";
s+=to_string(i);
}
}
else if(a[i]==1){
if(s!="") s+="+";
if(i==1) s+="x";
else{
s+="x^";
s+=to_string(i);
}
}
else if(a[i]<0){
s+=to_string(a[i]);
if(i==1) s+="x";
else{
s+="x^";
s+=to_string(i);
}
}
else{
s+="+";
s+=to_string(a[i]);
if(i==1) s+="x";
else{
s+="x^";
s+=to_string(i);
}
}
}
//cout<<a[0]<<endl;//
if(s=="") s+=to_string(a[0]);
else{
if(a[0]<0) s+=to_string(a[0]);
else if(a[0]>0){
s+="+";
s+=to_string(a[0]);
}
}
cout<<s;
return 0;
}
3🐋🐋区间数据处理(星耀;树状数组)🍰
时间限制:2秒
占用内存:512M
🐟题目思路
2024年码蹄杯职业院校赛道决赛题解_哔哩哔哩_bilibili
🐟代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,m,a[N],tree[N],ans[N];
struct QUERY{
int l,r,h,no;
}query[N];
struct number{
int h,no;
}numbers[N];
int lowbit(int x) {return x&-x;}
void add(int i){
for(;i<=n;i+=lowbit(i)) tree[i]++;
}
bool cmp1(number a,number b) {return a.h>b.h;}
bool cmp2(QUERY a,QUERY b) {return a.h>b.h;}
int sum(int i){
int ans=0;
for(;i>0;i-=lowbit(i)){
ans+=tree[i];
}
return ans;
}
int main( )
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>numbers[i].h;
numbers[i].no=i;
}
for(int i=1;i<=m;i++){
cin>>query[i].l>>query[i].r>>query[i].h;
query[i].no=i;
}
sort(numbers+1,numbers+1+n,cmp1);
sort(query+1,query+1+m,cmp2);
int id=1;
for(int i=1;i<=m;i++){
while(id<=n&&query[i].h<=numbers[id].h) add(numbers[id++].no);
ans[query[i].no]=sum(query[i].r)-sum(query[i].l-1);
}
for(int i=1;i<=m;i++) cout<<ans[i]<<endl;
return 0;
}
4🐋🐋小兔子乖乖,把门开开(钻石;单调队列)🍰
时间限制:1秒
占用内存:128M
🐟题目思路
2024年码蹄杯职业院校赛道决赛题解_哔哩哔哩_bilibili
🐟代码
#include<bits/stdc++.h>
using namespace std;
const long long N=3e5+5;
int main( )
{
long long n,m;
cin>>n>>m;
deque<long long> d;
long long s[N],ans=-1e8;
for(long long i=1;i<=n;i++){
cin>>s[i];
s[i]+=s[i-1];
}
d.push_back(0);
for(long long i=1;i<=n;i++){
if(!d.empty()&&d.front()<i-m) d.pop_front();
ans=max(ans,s[i]-s[d.front()]);
while(!d.empty()&&s[d.back()]>=s[i]) d.pop_back();
d.push_back(i);
}
cout<<ans;
return 0;
}
5🐋🐋魔法修路(星耀;并查集)🍰
时间限制:1秒
占用内存:256M
🐟题目思路
2024年码蹄杯本科院校赛道决赛题解_哔哩哔哩_bilibili
🐟代码
#include<bits/stdc++.h>
using namespace std;
int ans=0;
int v[300],top;
struct edge{
int x,y,w;
bool operator<(const edge &b) const{
if(w!=b.w) return w<b.w;
}
}e[200005];
struct node{
int f[20005];
int a,b;
inline int find(int x){
return x==f[x]?x:f[x]=find(f[x]);
}
inline void merge(int i){
a=find(e[i].x);
b=find(e[i].y);
if(a!=b) f[b]=a;
}
}ff[540],t;
int check(node &b){
int i,j;
for(i=1;i<top;i++)
if(b.find(v[i])!=b.find(v[i+1])) return 0;
return 1;
}
int find_block(int n){
int l=0,r=n+1,m;
while(l+1<r){
m=(l+r)/2;
if(check(ff[m])) r=m;
else l=m;
}
return l;
}
int f[20005];
int find(int x){
return x==f[x]?x:f[x]=find(f[x]);
}
int main( )
{
register int n,m,k,x,now=1,i,j,y,q,l,r,p,c,a,b,siz;
cin>>n>>m>>q;
for(i=1;i<=m;i++) cin>>e[i].x>>e[i].y>>e[i].w;
sort(e+1,e+1+m);
j=1;
for(int i=1;i<=n;i++) f[i]=i;
for(int i=1;i<=m;i++){
a=find(e[i].x);
b=find(e[i].y);
e[j]=e[i];
if(a!=b){
f[b]=a;
j++;
}
}
m=j-1;
siz=max(10,(int)(sqrt(m/3)));
for(i=1;i<=n;i++){
t.f[i]=i;
}
ff[0]=t;
for(i=1;i<=m;i++){
t.merge(i);
if(i%siz==0) ff[i/siz]=t;
}
while(q--){
cin>>l>>r>>p>>c;
top=0;
i=l/p*p+c;
if(i<l) i+=p;
for(;i<=r;i+=p){
top++;
v[top]=i;
}
x=find_block(m/siz);
t=ff[x];
for(i=x*siz+1;i<=m;i++){
t.merge(i);
if(check(t)){
cout<<e[i].w<<endl;
break;
}
}
if(i>m) cout<<"error";
}
return 0;
}
⭐创作不易,点个赞吧~
⭐点赞收藏不迷路~