第一月测
2026-03-22 10:39:18
发布于:浙江
T1 时间规划
#include<bits/stdc++.h>
using namespace std;
struct gz
{
long long A;
long long B;
};
bool cmp(gz j1,gz j2)
{
return j1.B<j2.B;
}
int main()
{
int n;
cin>>n;
vector<gz>gzsz(n);
for(int i=0;i<n;i++)
{
cin>>gzsz[i].A >> gzsz[i].B;
}
sort(gzsz.begin(), gzsz.end(),cmp);
long long sj=0;
bool f=1;
for(auto&gz:gzsz)
{
sj+=gz.A;
if(sj>gz.B)
{
f=0;
break;
}
}
if(f==1)cout<<"Yes";
else cout<<"No";
return 0;
}
T2 水桶
#include <bits/stdc++.h>
using namespace std;
struct SJ
{
int sj;
int lx;
int ni;
};
struct NN
{
int s,t,b;
vector<int>st;
};
bool cmp(SJ e1,SJ e2)
{
if (e1.sj!=e2.sj)return e1.sj<e2.sj;
return e1.lx < e2.lx;
}
int main()
{
int N;
cin>>N;
vector<NN>nns(N);
vector<SJ>sjs;
for(int i=0;i<N;i++)
{
cin>>nns[i].s>>nns[i].t>>nns[i].b;
sjs.push_back({nns[i].s,1,i});
sjs.push_back({nns[i].t,0,i});
}
sort(sjs.begin(),sjs.end(),cmp);
vector<int>kys;
int zd=0;
for(auto&e:sjs)
{
int idx=e.ni;
if(e.lx==1)
{
int xy=nns[idx].b;
vector<int>ysy;
while(xy>0&&!kys.empty())
{
int st=kys[0];
for(int i=0;i<kys.size()-1;i++)
{
kys[i]=kys[i+1];
}
kys.pop_back();
ysy.push_back(st);
xy--;
}
while(xy>0)
{
zd++;
ysy.push_back(zd);
xy--;
}
nns[idx].st=ysy;
}
else
{
for(int st:nns[idx].st)
{
int pos=0;
while(pos<kys.size()&&kys[pos]<st)
{
pos++;
}
kys.push_back(0);
for(int i=kys.size()-1;i>pos;i--)
{
kys[i]=kys[i-1];
}
kys[pos]=st;
}
}
}
cout<<zd<<"\n";
return 0;
}
T3 工厂
#include <bits/stdc++.h>
using namespace std;
vector<int>lj[105];
int n;
bool pd(int s,int t)
{
vector<bool>vis(n+1,0);
queue<int>q;
q.push(s);
vis[s]=1;
while(!q.empty())
{
int u=q.front();
q.pop();
if(u==t)return 1;
for(int v:lj[u])
{
if(!vis[v])
{
vis[v]=1;
q.push(v);
}
}
}
return 0;
}
int main()
{
cin>>n;
for(int i=0;i<n-1;i++)
{
int a,b;
cin>>a>>b;
lj[a].push_back(b);
}
for(int i=1;i<=n;i++)
{
bool f=1;
for(int j=1;j<=n;j++)
{
if(j==i)continue;
if(!pd(j,i))
{
f=0;
break;
}
}
if(f)
{
cout<<i<<"\n";
return 0;
}
}
cout<<-1<<"\n";
return 0;
}
T5 马拉松
#include<bits/stdc++.h>
using namespace std;
int jl(pair<int,int>a,pair<int,int>b)
{
return abs(a.first-b.first)+abs(a.second-b.second);
}
int main()
{
int n,k;
cin>>n>>k;
vector<pair<int,int>>d(n+1);
for(int i=1;i<=n;i++)cin>>d[i].first>>d[i].second;
vector<vector<int>>dp(n+1,vector<int>(k+1,INT_MAX));
dp[1][0]=0;
for(int i=2;i<=n;i++)
{
for(int j=0;j<=k;j++)
{
for(int m=1;m<i;m++)
{
int t=i-m-1;
if(j>=t&&dp[m][j-t]!=INT_MAX)
{
dp[i][j]=min(dp[i][j],dp[m][j-t]+jl(d[m],d[i]));
}
}
}
}
int z=INT_MAX;
for(int j=0;j<=k;j++)z=min(z,dp[n][j]);
cout<<z<<"\n";
return 0;
}
这里空空如也














有帮助,赞一个