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

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

时间:2024-11-19 18:45:21浏览次数:3  
标签: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++
    #include<bits/stdc++.h>usingnamespacestd;intmain(){ //一、分析问题 //已知:一个长度不超过80个字符的字符串。 //未知:字符串的反码。 //关系:如果这是一个小写字符,则它和字符a的距离与它的反码和字符z的距离相同;如果是一个大写字符,则它和字符A的距离与它......
  • 在bug中巩固C++
    记录自己的各种报错,在错误中学习ing结构体全局变量的声明与初始化问题#include<iostream>usingnamespacestd;//声明一个结构体BooksstructBook{stringname;stringauthor;stringsubject;intid;//构造函数Book(stringname,stringa......
  • 计算机毕设源码 python-基于flask在线考试系统
    标题:python-基于flask在线考试系统设计一个基于Flask框架的在线考试系统,需要考虑考生、教师和管理员的不同需求,确保系统的易用性、公平性和安全性。以下是一个典型的在线考试系统的主要功能模块:1.用户注册与登录•注册:用户可以通过手机号码、邮箱或社交账号注册。•登录:用......
  • 【C++】十六进制数据的字节序排列问题、大小端
    十六进制数据的字节序排列问题,涉及到大小端(Endianness)的概念。包括它与大小端存储方式的关系。1.十六进制数据在内存中的存储定义的数据#defineFRAME_TYPE_PARAM_SET0x30010x3001是一个16位(2字节)整数。在内存中,0x3001的存储方式依赖于系统的字节序:小端......
  • C++编程:通过多线程与协程优化阻塞型任务的调度性能
    文章目录0.引言1.多线程VS多线程+协程1.1示例1:使用传统的多线程进行矩阵乘法1.2.示例2:使用协程优化阻塞型任务3.分析与对比0.引言我们知道:多线程:适用于处理计算密集型任务或IO操作较少的场景,但会因为线程切换和创建销毁的开销而影响性能。协程:适用于处......
  • 实验4 C++
    任务2:GradeCalc.cpp1#pragmaonce2#include<iostream>3#include<vector>4#include<string>5#include<algorithm>6#include<numeric>7#include<iomanip>89usingstd::vector;10usingstd::......
  • C++ 学习笔记(1):STL、Vector 与 Set
    背景最近在尝试入坑蓝桥杯,于是先从C++开始学起,这里记个笔记。这里我的笔记是跟着这个教程来的。沙比学校天天整些屁事都没什么空折腾。前言笔者是JS/TS写的比较多,以前写过C但是有点忘了,所以文章里都是和JS进行对比着方便快速理解。同时其实我还有几个小问题,嘻嘻。没......
  • C++中的友元函数和友元类&友元的作用及注意事项
    1.C++中的友元函数和友元类友元函数:友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常,同一个开发者会出于技术和非技术的原因控制类的友元和成员函数,否则在更新类时,还需要征得其他部分的拥有者的同意。友元函数在定义上和调用......
  • 打卡信奥刷题(264)用C++信奥P2010[普及组/提高] [NOIP2016 普及组] 回文日期
    [NOIP2016普及组]回文日期题目背景NOIP2016普及组T2题目描述在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。牛牛习惯用888位数字表示一......
  • 详解 C++ 的内存序模型
    详解C++的内存序模型C++提供了内存序模型来控制多线程程序中不同线程对共享内存的访问顺序。最常用的是顺序一致性内存模型(memory_order_seq_cst),但它也提供了其他模型(如memory_order_relaxed)以优化性能。一、顺序一致性内存模型(memory_order_seq_cst)定义顺序一致性......