“师创杯”校赛

2024-09-04 08:48
文章标签 校赛 创杯

本文主要是介绍“师创杯”校赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

不多写什么,直接写题解。

A

艺术联合会

Time Limit: 1000MS Memory limit: 65536K

题目描述

艺术联合会顾名思义就是n个画家用n种颜色一起进行艺术创作(作画)。每一位画家仅使用一种颜色,并且规定n位画家使用的颜色是不同的,这里我们可以假设第一位画家使用的颜色编号为1,第2位画家使用的颜色编号为2以此类推。每一幅画上面都有n种颜色。我们假设把第j种颜色涂在第i幅画上需要消耗第j个画家的时间为 t[i][j]。
我们知道在任何情况下,规则都是至关重要的,因此画家们将根据以下规则进行作画:
1. 每一幅画都是由第一个画家先画,然后是第二个画家,然后是第三个画家……,也就是说,在第j个画家画完之后,一定是第(j + 1) 个画家进行作画 (如果有(j + 1)<= n)
2. 每一个画家在作画上按照这样的顺序进行作画:首先在第一幅画上作画,然后是第二幅画,依次类推直到第n幅画。
3. 不同的画家在不同的画幅上是可以同时工作的,比如说第二位画家在作第一幅画时,第一位画家可以作第二幅画。任何一个画家是不需要时间休息的。
4. 当第j个画家作完自己部分的画时,此幅画就立即可以被第(j + 1) 个画家使用。
假设第一位画家开始作画的时间是0,输出每一幅画被完成时的时间。

输入

第一行输入一个数T,表示有T组数据(1<=T<=100)。
每组数据第一行是两个整数:m 和 n(1 <= m <= 50000,1 <= n <= 5)m代表的是画幅的个数,n代表的是画家的个数。接下来每行有n个整数t[i][1],t[i][2]……t[i][n](1 <= t[i][j] <= 1000),t[i][j] 表示第j个画家把第j种颜色涂在第i幅画上需要的时间。

输出

每组数据输出一行含有m个数 r1,r2,……rm,这里ri表示第i幅画被完成时的时间。

示例输入

2
5 1
1
2
3
4
5
4 2
2 5
3 1
5 3
10 1

示例输出

1 3 6 10 15
7 8 13 21

提示

解题报告
DP。
用二维数组DP[][]来维护每一幅画完成所需要的时间,先预处理边界条件,DP[1][i]和DP[i][1]的情况,
DP[1][i]表示第i个画家完成第一幅画所需要的时间,等于当前第i个画家画第一幅画的时间加上前一个画家完成第一幅画的时间。
DP[i][1]表示第1个画家完成第i幅画的自己那部分所需要的时间,等于当前第一个画家画第i幅画的时间加上第一个画家完成前一幅画的时间。
DP[i][j](i!=1&&j!=1)的值等于MAX(dp[i-1][j],dp[i][j-1])+T[i][j]
理解就是第j个人完成第I幅画的时间等于     前一个人完成这幅画的时间     与     自己完成前一幅画的时间     取最大值加上自己完成当前这幅画的时间。。。
#include <iostream>using namespace std;
int num[50010][10];
int dp[50010][10];
int main()
{int t,n,m,cnt,i,j;cin>>t;while(t--){cin>>n>>m;for(i=1;i<=n;i++){for(j=1;j<=m;j++){cin>>num[i][j];}}int tmp=0;for(i=1;i<=n;i++){tmp+=num[i][1];dp[i][1]=tmp;}tmp=0;for(i=1;i<=m;i++){tmp+=num[1][i];dp[1][i]=tmp;}for(i=2;i<=n;i++){for(j=2;j<=m;j++){if(dp[i-1][j]>dp[i][j-1])dp[i][j]=dp[i-1][j]+num[i][j];else dp[i][j]=dp[i][j-1]+num[i][j];}}for(i=1;i<n;i++){cout<<dp[i][m]<<" ";}cout<<dp[n][m]<<endl;}return 0;
}

B
一水题
G
一水题
F

勾股定理

Time Limit: 1000MS Memory limit: 65536K

题目描述

给N个数,判断这N个数中存在多少组勾股数(勾股数:存在三个数满足a*a + b*b = c*c)。

输入

第一行输入一个数T(1<=T<=50),表示有T组数据。
每组数据输入一个N(1<=N<=1000)。
接下来N个数ai(1<=ai<=10^9)。

输出

每组数据输出一行,表示有多少组勾股数。

示例输入

3
4
4 3 5 3
4 
6 7 8 10
5
6 7 8 9 5

示例输出

2
1
0

提示

解题报告
二分+暴力
直接三重for循环肯定超时。。。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{int t,n,i,j,num[1010];scanf("%d",&t);while(t--){scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&num[i]);sort(num,num+n);int cnt=0;for(i=0;i<n;i++){for(j=i+1;j<n;j++){int l=j+1,r=n-1;while(l<=r){int mid=(l+r)/2;if((long long )num[i]*(long long)num[i]+(long long )num[j]*(long long )num[j]<(long long )num[mid]*(long long )num[mid])r=mid-1;else if((long long )num[i]*(long long )num[i]+(long long )num[j]*(long long )num[j]>(long long )num[mid]*(long long )num[mid])l=mid+1;else{cnt++;break;}}}}cout<<cnt<<endl;}
}



H

小胖吃肉

Time Limit: 1000MS Memory limit: 65536K

题目描述

众所周知,小胖非常喜欢吃肉。有一天,小胖发现了很多块肉。由于每一块肉的大小都不一样,并且每一块肉带给小胖的愉悦程度都不一样。但是因为小胖太胖了,所以小胖的妈妈规定小胖最多可以吃x体积的肉。小胖现在来求助于你,想让你找到一个最优的吃肉方式,使得小胖获得的愉悦度最高。
注:小胖可以只吃一块肉的一部分。

输入

首先输入一个整数T,代表有T组数据。
接下来的每组数据的第一行输入两个整数n,x。代表小胖发现了n块肉。小胖最多可以吃x体积的肉。
(n<=1000,x<=10000)
接下来的n行,每行输入两个整数a,b。代表这块肉的体积为a,单位体积的这块肉可以给小胖带来b的愉悦度。
(a<=1000,b<=10000)

输出

输出小胖最多可以获得的愉悦度为多少。

示例输入

1
2 3
10 1
1 3

示例输出

5

提示

小胖可以选择吃第二种肉1体积,吃第一种肉2体积,一共可以获得3+1*2=5的愉悦度
解题报告
贪心。
小胖先吃愉悦度高的肉,依次吃到不能吃为止。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>using namespace std;
struct node
{int v,w;
}num[1001];
int cmp(node a,node b)
{return a.w>b.w;
}
int main()
{int t,x,n,i,j;cin>>t;while(t--){memset(num,0,sizeof(num));cin>>n>>x;for(i=0;i<n;i++){cin>>num[i].v>>num[i].w;}sort(num,num+n,cmp);int mmax=0,ans=0;for(i=0;i<n;i++){for(j=1;j<=num[i].v;j++){if(mmax+1<=x){mmax++;ans+=num[i].w;}}}cout<<ans<<endl;}return 0;
}


这篇关于“师创杯”校赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135549

相关文章

2015年校赛总结

题目名为“校赛总结”,其实更想换成“Rainbow为什么五题滚粗?!”。作为今年校赛大二没拆的两个队伍之一,结果打成这样,没脸见人了,总结起来就是我认为自己今天SB了。主要有以下几点: 1.我今天状态的确不好,最后卡的那道B题跟去年在农大校赛上遇见的那题类似,在最后那段时间我已经有思路了,可是由于当时不敢写。等到最后15分钟才开始敲,加上我用很麻烦的Dijstra那种方法,调试起来好多细节要处理

哈理工校赛1C题

C.长长长长龙 Time Limit: 3000 MSMemory Limit: 32768 K Total Submit: 202 (73 users)Total Accepted: 50 (46 users)Special Judge: No Description 时间:今天是20XX年,XX月,XX日。 背景:在这个科技非常发达的今天,某某大型游戏公司的全息游戏马上就要开服了

校赛 SDUT OJ2860生日Party(BFS)

题目地址:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2860 唉。。校赛的时候把这题用搜索的时间复杂度2^15次方想成了15^15次方。。。。所以没写。。。后来用的最短路的floyd算法改成了最长路做的,但有一些细节不好处理,调了会没调出来。。赛后才想到用暴搜不会超时。。于是补完线代后怒敲暴搜代码

《平衡小车控制系统》电子设计大赛校赛感悟

我们学校举行了一次电子设计大赛选拔赛,虽然我们在测试的时候全部都可以完成,最后考核的时候因为方案选择问题以及各种设计逻辑等原因没能成功晋级,但我能从这次备赛中学到很多东西,遂分享一下,与广大网友交流经验。(只讲思路,代码太烂了就不提供了) 题目如下: 考察点: 基础部分:1.小车循迹 2.停车+蜂鸣器 3.控速停车 发挥部分:1.视觉云台,激光打靶 2.上下坡 3.字模识别+信息传输

【北师校赛】B 数细菌

题目链接:bnu 题目分析:一般的数学吧,签到题目,注意输出10位小数,lz就是因为用cout<<ans<<endl; 所以一直wa                     用线段图分析吧,一般将细菌分为两个阶段 初生态(设为a),和分裂态 (设为A)                     在任意一时态都存在至少有2个态,我们分别设个数为 x个和 y 个

2024年西安交通大学程序设计竞赛校赛

2024年西安交通大学程序设计竞赛校赛 文章目录 2024年西安交通大学程序设计竞赛校赛D瑟莉姆的宴会E: 雪中楼I: 命令行(待补)J:最后一块石头的重量(待补)K: 崩坏:星穹铁道(待补)M:生命游戏N: 圣诞树 D瑟莉姆的宴会 解题思路: ​ 该题是一道思维题。 仔细想想,只要满足非负就行了,那么如果一个点没有人支配他,那让他为根节点,其他都受他的支配这样的话如果后

2020校赛 D逛校园 E 布阵排兵 F 因子 补题

稳定亚军使人懒惰!!! 只贴代码!!! D 逛校园 #include <bits/stdc++.h>typedef long long ll;const ll mod = 1e9+7;using namespace std;const int N = 1e5 + 5;ll Case,n;char op;ll x,nx,ny,nd;ll dir[4][2]={{1,0},{0,1}

20240529训练题目(西安交通大学 2024年程序设计竞赛校赛)

题目 D题 欢迎来到瑟莉姆大人的享乐宴会! 宴会中一共有n个访客,编号1∼n。为了更好地控制影的力量,瑟莉姆要求有n−1个访客都恰好受 到另一个访客的支配,而剩下的那个人成为总支配者,支配其他n−1名访客。访客间的直接支配关系 构成了一棵有根树。 对于这棵树来说,若结点a的父结点是b,那么称b支配了a,同时称b是a的直接支配者。同时,支 配的关系具有传递性,即若a支配b,b支配c,那么a也就支

2023年西安交通大学校赛(E-雪中楼)

E.雪中楼 如果算出按南北的序列,再转成从低到高的编号序列,岂不是太麻烦了,幸好,没有在这方面费长时间,而是意识到,本质就是要从低到高的编号序列,所以我就按样例模拟了一下,当a[i]=0时说明编号为i的楼,是前面所有楼中最低的,这时i就该放前面,如果为j,说明它比j高,这时i就该放到j后面。 答案上是用的链表,这样就可以实现,不断插入合适的位置。而我起初用的定义find和insert,查找

2024年西安交通大学程序设计校赛

A题 签到题 代码如下 //A#include<iostream>#include<algorithm>#define int long long#define endl '\n'#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);using namespace std;signed main(){IOSint