首页 > 编程语言 >c++等级考试第8级第2卷

c++等级考试第8级第2卷

时间:2024-11-23 13:29:52浏览次数:14  
标签:totalCost std minLen int c++ totalLen 考试 include 等级

                                                                     道路(2024.3八级)

代码

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
struct Road
{
    int d,L,t;
};
int N,K,R;
vector < vector <Road> > G(110);//用二维数组表示临界表,G[s]表示和s邻接的路
int minLen;//全局变量,记录最短的路径长度
int totalCost;//当前状态的花费
int totalLen;//当前状态的长度
int visited[110];
int minL[110][10010];//minL[i][j]的意义是当到达i点是花费为j时的最短路径
void Dfs(int s)
{
    if(s==N)
    {
        minLen=min(minLen,totalLen);
        return ;
    }
    int len=G[s].size();
    for(int i=0;i<len;i++)//枚举和s相邻接额情况
    {
        Road r=G[s][i];
        if(!visited[r.d])//如果没有被走过
        {
            /*下面三个if语句是三条剪枝条件*/
            if(totalCost+r.t>K)//如果当前花销大于K了
                continue;
            if(totalLen+r.L>=minLen)//如果当前的路径已经超过了已存在的最短路径,那就没必要往后dfs了
                continue;
            //如果存在两种方式都到达同一点并且花销相同,但是如果当前的长度大于另一种方式的长度,则continue
            if(totalLen+r.L>minL[r.d][totalCost+r.t])
                continue;
            minL[r.d][totalCost+r.t]=totalLen+r.L;
            visited[r.d]=1;
            totalCost+=r.t;
            totalLen+=r.L;
            Dfs(r.d);
            visited[r.d]=0;//因为可能存在多种方式的dfs的路径,所以每次dfs之后都要还原到之前的状态
            totalCost-=r.t;
            totalLen-=r.L;
        }
    }
}
int main()
{
    cin>>K>>N>>R;
    for(int i=0;i<R;i++)
    {
        int s;
        Road r;
        cin>>s;
        cin>>r.d>>r.L>>r.t;
        G[s].push_back(r);
    }
    totalCost=0;
    totalLen=0;
    minLen=1<<30;//无穷大
    memset(visited,0,sizeof(visited));
    for(int i=1;i<=N;i++)
        for(int j=0;j<10010;j++)
            minL[i][j]=1<<30;
    visited[1]=1;
    Dfs(1);
    if(minLen<(1<<30))
        cout<<minLen<<endl;
    else
        cout<<-1<<endl;
    return 0;
}
                                                                   Freda的越野跑(2024.3八级)

代码

#include <iostream>
#define N 100002
int a[N] = {0}, t[N] = {0};
long long c = 0;
void merge(int l, int m, int r) {
  int i = l, j = m + 1, k = l;
  while (i <= m && j <= r)
    if (a[i] > a[j])
      t[k++] = a[i++];
    else {
      t[k++] = a[j++];
      c += 1 + m - i;
    }
  while (i <= m)
    t[k++] = a[i++];
  while (j <= r)
    t[k++] = a[j++];
  for (i = l; i <= r; ++i)
    a[i] = t[i];
}
void divide(int l, int r) {
  int m;
  if (r > l) {
    m = (r + l) / 2;
    divide(l, m);
    divide(m + 1, r);
    merge(l, m, r);
  }
}
int main() {
  int n, i = 0;
  std::cin >> n;
  while (i < n)
    std::cin >> a[i++];
  divide(0, n - 1);
  std::cout << c;
}
                                                               Rainbow的商店(2024.3八级)

代码

#include<iostream>
#include<algorithm>
#include<queue>
#pragma warning (disable:4996);
using namespace std;
int N;
struct Goods
{
	int w;
	int d;
	friend bool operator <(const Goods a, const Goods b)
	{
		if (a.w != b.w)
		{
			return a.w < b.w;//大的天数小的在前
		}
		else
		{
			return a.d > b.d;
		}
	}
}good[10005];
bool vis[10005] = {};
int main()
{
	cin >> N;
	priority_queue<Goods>que;
	int maxval=0;
	for (int i = 1; i <= N; i++)
	{
		scanf("%d %d", &good[i].w, &good[i].d);
		que.push(good[i]);
	}
	while (!que.empty())
	{
		Goods now = que.top();
		que.pop();
		for (int i = now.d; i >= 1; i--)
		{
			if (!vis[i])
			{
				vis[i] = 1;
				maxval += now.w;
				break;
			}
		}
	}
	printf("%d\n", maxval);
	return 0;
}
                                                                  冰阔落|(2024.3八级)

代码

#include <bits/stdc++.h>
using namespace std;
string str;
int a[50000+5],cnt;
int root(int x)
{
    if(a[x]==x) return x;
    return root(a[x]);
}
void find(int l,int r)
{
    int ll=root(l),rr=root(r);
    if(ll==rr)
    {
        printf("Yes\n");
        //cout<<"Yes"<<endl;
    }
    else
    {
        a[rr] =ll;
        cnt--;
        //cout<<"No"<<endl;
        printf("No\n");
    }
}
int main()
{
    int m,n,l,r;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        cnt=n;
        for(int i=1;i<=n;i++)
        {
            a[i]=i;
        }
        for(int i=1;i<=m;i++)
        {
            scanf("%d %d",&l,&r);
            //cin>>l>>r;
            find(l,r);
        }
        printf("%d\n",cnt);
        //cout<<cnt<<endl;
        for(int i=1;i<=n;i++)
            if(a[i]==i) printf("%d ",i);//cout<<i<<" ";
        //cout<<endl;
        printf("\n");
    }
    return 0;

}

标签:totalCost,std,minLen,int,c++,totalLen,考试,include,等级
From: https://blog.csdn.net/fusca123/article/details/143780001

相关文章

  • C++学习笔记-Cherno C++系列
    21-23.【ChernoC++】C++中的静态(static)static变量只在编译单元内部链接静态变量的作用域只在单个文件内建议:在非特殊情况下,永远使用static定义全局变量以限制作用域全局变量重复定义/*a.cpp*/intg_Variable=5;/*main.cpp*/#include<iostream>intg_V......
  • 2024年09月CCF-GESP编程能力等级认证Scratch图形化编程一级真题解析
    本文收录于《Scratch等级认证CCF-GESP图形化真题解析》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。一、单选题(每题3分,共30分)第1题据有关资料,山东大学于1972年研制成功DJL-1计算机,并于1973年投入运行,其综合性能居当时全国第三位。DJL-1计算机运算控......
  • vscode的C++引用头文件总是报错,网上教程都试了还是没用,请来这里。
    本教程跟网上大部分教程大同小异。(节省时间:在编辑task.json文件时只需写头文件路径,一定不要写源文件路径即可,其余步奏跟其他人的相同)若成功解决问题,希望可以给小编一个赞其中一些操作看不懂的可以先看其他人的步奏,如:适合初学者!超详细的vscode的C++自定义头文件的配置!_vscod......
  • C++提高编程-STL
    STL初识容器算法迭代器初识vector存放内置数据类型#include<vector>#include<algorithm>voidmyPrint(intx){ cout<<x<<'';}voidtest01(){ //创建vector容器 vector<int>v; //向容器中插入数据 v.push_back(10); v.push_back(20); v.......
  • GB/T 4208-2017 外壳防护等级(IP代码)(3)—特征数字和标志
    写在前面本系列文章主要讲解外壳防护等级GB/T4208标准的相关知识,希望能帮助更多的同学认识和了解GB/T4208标准。若有相关问题,欢迎评论沟通,共同进步。(*^▽^*)外壳防护等级6.第二位特征数字第二位特征数字表示外壳防止由于进水而对设备造成有害影响的防护等级。第二位......
  • GB/T 4208-2017 外壳防护等级(IP代码)(4)—试验要求
    写在前面本系列文章主要讲解外壳防护等级GB/T4208标准的相关知识,希望能帮助更多的同学认识和了解GB/T4208标准。若有相关问题,欢迎评论沟通,共同进步。(*^▽^*)外壳防护等级11.试验一般要求11.1防水防尘试验的环境条件除非有关产品标准另有规定,试验应在GB/T2421.1—2......
  • C++游戏开发
    C++是一种常用的编程语言,广泛应用于游戏开发领域。在使用C++进行游戏开发时,可以利用C++的面向对象特性、高性能和可移植性来创建游戏。以下是C++游戏开发的详细步骤:设计游戏的概念和目标:在开始游戏开发之前,你需要明确游戏的概念和目标,包括游戏的类型、玩法、关卡设计等。这......
  • 【GESP】C++一级练习 luogu-B2060, 满足条件的数累加
    一级知识点循环和取余操作练习题,基础练习。题目题解详见:https://www.coderli.com/gesp-1-luogu-b2060/【GESP】C++一级练习luogu-B2060,满足条件的数累加|OneCoder一级知识点循环和取余操作练习题,基础练习。https://www.coderli.com/gesp-1-luogu-b2060/......
  • 【GESP】C++一级练习 luogu-B2058, 奥运奖牌计数
    一级知识点循环和求和练习。题目题解详见:https://www.coderli.com/gesp-1-luogu-b2058/https://www.coderli.com/gesp-1-luogu-b2058/https://www.coderli.com/gesp-1-luogu-b2058/2008 年北京奥运会,A国的运动员参与了 n 天的决赛项目 (1≤n≤100)。现在要统计一下A国......
  • 宝宝的C++,小学生C++编程启蒙 书籍等
    1、宝宝的C++(2016-11)2、啊哈编程星球:一本书入门Python和C++(2019年09月)啊哈编程星球啊哈编程星球!编程学习从这开始~3、我的第一本算法书(修订版)--2024.24、聪明的算法(2022.07)--6到12岁小读者量身打造的前沿科学大揭秘系列科普书5、走进GoC的编程世界(......