1.红石难题(将红石线路拉成一条一维的线,再用总线路除一个红石源可满足的能量需求范围,不够进一即可)
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[1000000],b[10000000];
signed main()
{
int n,m;
cin>>n>>m;
int ans=1;
for(int i=0;i<n;i++)
{
cin>>a[i]>>b[i];
if(i)ans+=abs(a[i-1]-a[i])+abs(b[i-1]-b[i]);
}
if(m==0)cout<<0<<endl;
else
{
int d=(15-m)*2+1;
int res;
if(ans%d!=0)
res=ans/d+1;
else res=ans/d;
cout<<res<<endl;
}
return 0;
}
2.奶茶袋收集(隔板法,求一个差分数列,排序后前n-m项和就是所求)
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[100000],b[1000000];
signed main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)cin>>a[i];
for(int i=0;i<n-1;i++)
{
b[i]=a[i+1]-a[i];
}
sort(b,b+n-1);
int sum=0;
for(int i=0;i<n-m;i++)
sum+=b[i];
cout<<sum<<endl;
return 0;
}
3.该加训了(换位异或的性质,推算后我们可得出f(a,b)=a^b,又例如a^b^c=x,b^c=y,那么a=x^y,由此我们可得出f(l-1)^f(l,r)=f(r),f(l,r)=f(r)^f(l-1))
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[1000000],b[10000000];
signed main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
b[i]=b[i-1]^a[i];
}
int m;
cin>>m;
int l,r;
while(m--)
{
cin>>l>>r;
cout<<(b[r]^b[l-1])<<endl;
}
return 0;
}
4.cy的倒金字塔工厂(使用栈和队列进行模拟,按照条件写即可)
#include<bits/stdc++.h>
#define int long long
using namespace std;
stack<int> l,b,h;//l:流水线,b:盒子,h:半成品,r:垃圾
queue<int> r;
signed main()
{
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++)
{
int a;
cin>>a;
l.push(a);
}
while(!l.empty()||!b.empty())
{
if(!l.empty())
{
if(h.empty())
{
h.push(l.top());
l.pop();
}
else
{
if(l.top()>h.top()&&l.top()-h.top()<=k)
{
h.push(l.top());
l.pop();
}
else
{
if(!b.empty()&&b.top()>h.top()&&b.top()-h.top()<=k)
{
h.push(b.top());
b.pop();
}
b.push(l.top());
l.pop();
}
}
}
if(l.empty())
{
if(h.size()>=2)
{
while(!h.empty())
{
cout<<h.top()<<" ";
h.pop();
}
cout<<endl;
}
else
{
r.push(h.top());
h.pop();
}
stack<int>t;
while(!b.empty())//装到流水线末尾(为了顺序正确找个中间栈)
{
t.push(b.top());
b.pop();
}
while(!t.empty())
{
l.push(t.top());
t.pop();
}
}
}
while(!r.empty())
{
cout<<r.front()<<" ";
r.pop();
}
return 0;
}
5.swj学长的精灵融合(用vector存图,将与x有关的精灵全部存入res中,并在输入时将精灵的品种和等级记录,最后遍历累加res中除x外精灵所需经验)
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[100000],b[1000000],d1[100],d2[100],d3[100],p[1000000],q[1000000];
int x,m;
vector<int> v[1000000],res;
struct jing
{
int a;
int b;
int c;
int d;
};
struct jing j[100000];
void dfs(int n)
{
res.push_back(n);
for(auto&t:v[n])
{
dfs(t);
}
}
signed main()
{
cin>>x>>m;
for(int i=0;i<m;i++)
{
cin>>j[i].a>>j[i].b>>j[i].c>>j[i].d;
v[j[i].a].push_back(j[i].b);
p[j[i].b]=j[i].c;
q[j[i].b]=j[i].d;
}
d1[1]=0,d2[1]=0,d3[1]=0;
d1[2]=1,d2[2]=1,d3[2]=1;
for(int i=3;i<=100;i++)
{
d1[i]=d1[i-1]+i-2;
d2[i]=d2[i-1]+2*(i-2);
d3[i]=d3[i-1]+5*(i-2);
}
dfs(x);
int sum=0;
for(auto&t:res)
{
int c,d;
c=p[t],d=q[t];
if(t==x)continue;
else {
if (c== 1)sum += d1[d];
else if (c == 2)sum += d2[d];
else sum += d3[d];
}
}
cout<<sum<<endl;
return 0;
}