CSDN竞赛第30期题解

Posted 酷酷的Herio

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSDN竞赛第30期题解相关的知识,希望对你有一定的参考价值。

CSDN竞赛第30期题解

1、题目名称:天然气订单

天然气运输成本昂贵,危险性高,为了节省运输成本,提倡绿色环保,需要尽可能的优化订单配送,比如相同地区的天然
气订单可以一次性配送。 现需要向多个地区运输天然气。但是同一个地区可能有多个订单需求。当前仅只知道某些成对的
订单是同一个地区的,同一个地区的天然气需要尽可能一次性配送从而降低运输成本,所以需要尽可能的将同一个地区的
订单放在一起。订单的编号是1到n。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=2e5+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
const int hashmod[4] = 402653189,805306457,1610612741,998244353;
#define mst(a,b) memset(a,b,sizeof a)
#define db double
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define x first
#define y second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define all(a) a.begin(),a.end()
#define VI vector<int>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define ios ios::sync_with_stdio(false),cin.tie(nullptr)
void Print(int *a,int n)
for(int i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d\\n",a[n]);

template <typename T> //x=max(x,y) x=min(x,y)
void cmx(T &x,T y)
if(x<y) x=y;

template <typename T>
void cmn(T &x,T y)
if(x>y) x=y;

int s[N];
vector<int>e[N];
int find(int x)
return x==s[x]?x:s[x]=find(s[x]);

bool cmp(vector<int>&u,vector<int>&v)
return u[0]<v[0];

int main()
int n,m;cin>>n>>m;
rep(i,1,n) s[i] = i;
rep(i,1,m)
int u,v;cin>>u>>v;
u = find(u),v=find(v);
if(u!=v) s[u] = v;

rep(i,1,n)
e[find(i)].pb(i);

vector<vector<int> >v;
rep(i,1,n)
if(!e[i].empty()) 
//sort(e[i].begin(),e[i].end());
v.pb(e[i]);

sort(v.begin(),v.end(),cmp);
printf("%d\\n",(int)v.size());
for(auto x:v)
sort(x.begin(),x.end());
for(auto val:x)
printf("%d ",val);

puts("");

return 0;

2、题目名称:小艺读书

书是人类进步的阶梯。 小艺每周因为工作的原因会选择性的每天多读几页或者少读几页。 小艺想知道一本n页的书她会在
周几读完。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e4+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
const int hashmod[4] = 402653189,805306457,1610612741,998244353;
#define mst(a,b) memset(a,b,sizeof a)
#define db double
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define x first
#define y second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define all(a) a.begin(),a.end()
#define VI vector<int>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define IOS ios::sync_with_stdio(false),cin.tie(nullptr)
void Print(int *a,int n)
for(int i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d\\n",a[n]);

template <typename T> //x=max(x,y) x=min(x,y)
void cmx(T &x,T y)
if(x<y) x=y;

template <typename T>
void cmn(T &x,T y)
if(x>y) x=y;

int a[8];
int main()
int n;cin>>n;
int s =0;
rep(i,1,7)
cin>>a[i];
s+=a[i];

//if(n==0) return puts("7"),0;
//else 
for(int i=1;;i=i%7+1)
if(n>a[i])
n-=a[i];

else 
printf("%d\\n",i);
return 0;


return 0;

3、题目名称:买苹果

小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在
只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e4+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
const int hashmod[4] = 402653189,805306457,1610612741,998244353;
#define mst(a,b) memset(a,b,sizeof a)
#define db double
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define x first
#define y second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define all(a) a.begin(),a.end()
#define VI vector<int>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define IOS ios::sync_with_stdio(false),cin.tie(nullptr)
void Print(int *a,int n)
for(int i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d\\n",a[n]);

template <typename T> //x=max(x,y) x=min(x,y)
void cmx(T &x,T y)
if(x<y) x=y;

template <typename T>
void cmn(T &x,T y)
if(x>y) x=y;

int main()
int n;cin>>n;
int s=1e9;
for(int i=0;i*6<=n;i++)
int j = (n-i*6);
if(j%8==0)
j/=8;
s=min(s,i+j);


if(s==1e9) cout<<-1;
else cout<<s;
return 0;

4、题目名称:圆桌

有N个客人与足够多张的圆桌。主人安排每位客人坐在一个圆桌边,但是每位客人希望自己左右边上分别有一些空座位,
不然会觉得害羞。注意,如果一个客人所在的圆桌只有他一个人,那么他左边的空座位数量就是他右边的空座位数量。 试
问主人需要准备多少个座位,才能让每个客人舒适的坐下。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e4+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
const int hashmod[4] = 402653189,805306457,1610612741,998244353;
#define mst(a,b) memset(a,b,sizeof a)
#define db double
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define x first
#define y second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define all(a) a.begin(),a.end()
#define VI vector<int>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define IOS ios::sync_with_stdio(false),cin.tie(nullptr)
void Print(int *a,int n)
for(int i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d\\n",a[n]);

template <typename T> //x=max(x,y) x=min(x,y)
void cmx(T &x,T y)
if(x<y) x=y;

template <typename T>
void cmn(T &x,T y)
if(x>y) x=y;

int main()
int n;
cin>>n;
vector<int>u,v;
rep(i,1,n)
int x,y;cin>>x>>y;
u.pb(x);
v.pb(y);

sort(u.rbegin(),u.rend());
sort(v.rbegin(),v.以上是关于CSDN竞赛第30期题解的主要内容,如果未能解决你的问题,请参考以下文章

CSDN竞赛第32期题解

CSDN竞赛第32期题解

CSDN竞赛第28期题解

CSDN竞赛第28期题解

CSDN竞赛第27期题解

CSDN竞赛第27期题解