当前位置: 首页 > news >正文

2019年5月9日考试解题报告

2019年5月9日考试解题报告

我的思考

考了个二百五......果然,**就该待在**桶里

总体来说这次考试还是比较简单的,最后一个题我都不知道为什么没过......还是太lj了啊

T1:多重背包裸题,无需任何装饰......

T2:求前缀和

T3:简单贪心,我却只有五十分

(感觉到这里这篇解题报告就应该结束了,似乎没啥好写的了qwq)

题解们

T1

多重背包
(backpack.cpp/c/pas)
(1s/256M)

题目描述

提供一个背包,它最多能负载重量为W的物品。

现在给出N种物品:对于第i类物品,一共有Ci件物品;对于每一件物品,重量为Wi,价值为Vi。

找出一种装载方式使得背包中的物品总价值最大。

输入格式(backpack.in)

第一行两个整数N,W,代表物品的种类与背包的总负重。

第2~N+1行,每行三个整数Wi, Vi, Ci,代表第i种物品的重量、价值与数量。

输出格式(backpack.out)

仅一行,一个整数V,代表最大的总价值。

样例输入

3 9
5 8 2
3 6 2
2 1 5

样例输出

14

数据范围与限制

\(1<=N<=20, 0<=W<=1000\)

\(1<=Wi<=100, 0<=Vi<=100, 0<=Ci<=100\)

思路

这就是一道多重背包的裸题,直接把模板打出来用就行了,这里我用了二进制转化

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define N 50010
#define MAXN 1001
#define ll long long
using namespace std;

inline int read() {
    char c=getchar();
    int x=0,f=1;
    for(; !isdigit(c); c=getchar())if(c=='-')f=-1;
    for(; isdigit(c); c=getchar())x=x*10+c-48;
    return x*f;
}

ll f[N],v[MAXN],w[MAXN];

int main() {
    freopen("backpack.in","r",stdin);
    freopen("backpack.out","w",stdout);
    int n,W,wi,vi,ci,tot=0;
    n=read(),W=read();
    for(int i=1; i<=n; ++i) {
        wi=read(),vi=read(),ci=read();
        for(int j=1;; j<<=1) {
            if(ci<j) {
                v[++tot]=wi*ci,w[tot]=vi*ci;
                break;
            }
            v[++tot]=wi*j,w[tot]=vi*j,ci-=j;
        }
    }
    for(int i=1; i<=tot; ++i) {
        for(int j=W; j>=v[i]; --j)
            f[j]=max(f[j],f[j-v[i]]+w[i]);
    }
    cout<<f[W]<<'\n';
    fclose(stdin);
    fclose(stdout);
    return 0;
}

T2

循环序列
(circulate.cpp/c/pas)
(1s/256M)

题目描述

Alice与Bob在玩游戏:

Alice首先给出两个数\(X\)\(Y\) \((X<=Y)\)

Bob则按顺序将\(X,X+1,X+2,…,Y-1,Y\)写成一个大数S。

Alice最后将S首尾相连,让其围成一个圈。

这时,Bob想知道,从S的开头出发,往后的第L位到第R位数字之和是多少。

输入格式(circulate.in)

第一行四个整数\(X,Y,L,R\),代表Alice的两个数字和Bob想要知道的第\(L\)位到第\(R\)位的数字之和。

输出格式(circulate.out)

仅一行,一个整数M,代表第L位到第R位的数字之和。

样例输入

10 11 4 12

样例输出

7

样例解释

Bob将数字写成一行大数\(S = 1011\);围成一个圈后,从第4位到第12位分别是\(1,1,0,1,1,1,0,1,1\),它们的和是\(7\).

数据范围与限制

对于50%的数据,L=1, X,Y,L,R<=1000;

对于100%的数据,S的长度不大于10000,X,Y,L,R<=100000000.

思路

我们可以先将它的每一位分解出来,然后求前缀和,因为是一个环,所以直接除以再加上取模就可以不消耗较多空间和较多的时间得到答案

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define N 1010
#define MAXN 10100
using namespace std;

inline int read() {
    char c=getchar();
    int x=0,f=1;
    for(; !isdigit(c); c=getchar())if(c=='-')f=-1;
    for(;isdigit(c); c=getchar())x=x*10+c-48;
    return x*f;
}

int x,y,l,r;
int a[MAXN],s[MAXN],n=0,m,b[N];

int work(int x){
    if(x==0)return 0;
    int g=x/n;
    int r=x%n;
    return s[n]*g+s[r];
}

int main(){
    //freopen("circulate.in","r",stdin);
    //freopen("circulate.out","w",stdout);
    x=read(),y=read(),l=read(),r=read();
    for(int i=x;i<=y;i++){
        m=0;
        int tmp=i;
        while(tmp!=0)b[++m]=tmp%10,tmp/=10;
        for(int j=m;j!=0;j--)a[++n]=b[j];
    }
    for(int i=1;i<=n;i++){
        s[i]=s[i-1]+a[i];//求前缀和 
    }
    int lefted=work(l-1);
    int righted=work(r);
    cout<<righted-lefted<<"\n";
    fclose(stdin);
    fclose(stdout);
    return 0;
}

T3

合并游戏
merge.cpp/c/pas
(1s/256M)

题目描述

Cindy和Dan在玩一个游戏。

一开始Cindy想出了N个数,接着她把这N个数全部给了Dan。

Dan得到这组数后,它会挑出3个数(如果不足3个则全部挑出)。Dan会把这几个数加起来变成一个数,然后再把这个数与剩下的数再放到一起。Dan会一直这样做,直到最后只剩下一个数。

Cindy则会在旁边记下每次Dan得到的数,她把这些数加起来,作为本次游戏的得分。她想知道,对于一组数,Dan能得到的最大的得分是多少?

输入格式

第一行一个正整数N,代表这组数的个数;

第二行N个正整数,代表这N个整数。

输出格式

一行一个整数,代表可能的最大得分。

样例输入(merge.in)

4
3 1 5 6

样例输出(merge.out)

29

样例解释

Dan可以首先把(3,5,6)这三个数先合并起来,得到3 + 5 +6 = 14;接着他把剩下的两个数再合起来,得到1+14=15.这样,总得分是最大的 14 + 15 = 29.

数据范围与限制

对于50%的数据,N<=10

对于100%的数据,N<=1000,所有数不大于1000

思路

这题还是比较简单的,可惜我还是挂分了......

排序从大到小找最大的一起加就行了

代码

#include<iostream>
#include<cstdio>
#include<queue>
#include<stack>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstdlib>
#include<map>
#include<set>
#include<cstring>
#include<string>
using namespace std;

inline int read() {
    char c=getchar();
    int x=0,f=1;
    for(; !isdigit(c); c=getchar())if(c=='-')f=-1;
    for(; isdigit(c); c=getchar())x=x*10+c-48;
    return x*f;
}

int n;
int a[1001];

bool cmp(int a,int b) {
    return a>b;
}

int main() {
    freopen("merge.in","r",stdin);
    freopen("merge.out","w",stdout);
    n=read(); 
    for(int i=1; i<=n; ++i)a[i]=read();
    sort(a+1,a+1+n,cmp);
    long long ans = 0;
    long long now = a[1];
    for(int i=2; i<=n; i+=2) {
        now+=a[i]+a[i+1];
        ans+=now;
    }
    printf("%d\n",ans);
    fclose(stdin);
    fclose(stdout);
    return 0;
}

转载于:https://www.cnblogs.com/Snowindira/p/10840950.html

相关文章:

  • 银联基于OpenStack 的“五高”生产金融云技术白皮书
  • 通过shell终端上传下载文件
  • vscode——设置自动保存
  • 端口随意开很危险 常见端口解析
  • rsync搭建
  • 冲刺进度条9
  • 关于parent指针以及对话框属性
  • 个人冲刺9
  • 如何实现报表直接打印需求
  • 自定义函数
  • Day 39 外键变种,修改表,复制表
  • 第一阶段冲刺10
  • WPF入门教程(十)--数据绑定(2)(转)
  • VS.NET(C#)--2.4_aspx默认页面模板代码
  • 网站搭建 (第14天) xadmin后台强化
  • 【译】理解JavaScript:new 关键字
  • Codepen 每日精选(2018-3-25)
  • js对象的深浅拷贝
  • nodejs实现webservice问题总结
  • passportjs 源码分析
  • Redux 中间件分析
  • Spring Boot快速入门(一):Hello Spring Boot
  • TypeScript实现数据结构(一)栈,队列,链表
  • 技术胖1-4季视频复习— (看视频笔记)
  • 微服务框架lagom
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #define、const、typedef的差别
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (十一)手动添加用户和文件的特殊权限
  • .mysql secret在哪_MySQL如何使用索引
  • .NET DataGridView数据绑定说明
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • ??myeclipse+tomcat
  • @Autowired和@Resource的区别
  • [20140403]查询是否产生日志
  • [ACTF2020 新生赛]Upload 1
  • [C#]使用PaddleInference图片旋转四种角度检测
  • [C++]18:set和map的使用
  • [C++基础]-初识模板
  • [ERROR]-Error: failure: repodata/filelists.xml.gz from addons: [Errno 256] No more mirrors to try.
  • [ffmpeg] x264 配置参数解析
  • [GDOUCTF 2023]<ez_ze> SSTI 过滤数字 大括号{等
  • [HDU3710]Battle over Cities
  • [IE编程] 多页面基于IE内核浏览器的代码示例
  • [iOS]把16进制(#871f78)颜色转换UIColor
  • [JavaEE]线程的状态与安全
  • [Linux_IMX6ULL应用开发]-Makefile
  • [loj#115] 无源汇有上下界可行流 网络流
  • [NSSRound#16 Basic]RCE但是没有完全RCE
  • [office] excel如何计算毛重和皮重的时间间隔 excel计算毛重和皮重时间间隔方法 #笔记#学习方法