哈尔滨工程大学ACM预热赛(A,C,H,I)
A:
链接:https://ac.nowcoder.com/acm/contest/554/A
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
大虎是学校信息学集训队的,立刻想到用计算机来解决这个问题,并很快有了解答:13。第二天他把问题拿到了学校,并说如果第一行有N个格子,第二行有N-1个格子,…,第N行有1个格子,怎么办?现在请你一块来帮助他解决这个难题。
数据范围
30%数据:1≤N≤12
50%数据:1≤N≤30
100%数据:1≤N≤100
输入描述:
仅一行,一个正整数N。
输出描述:
一行,方案总数。
输入
3
输出
13 思路:看到这种小规模题,先打表。
打表代码:大力搜
LL sum = ;
int n = ;// 改变n
void dfs(int now,int dep){
if(dep == ){
now==?sum+=:sum+=;
return;
}
for(int i = ; i <= now && i <= dep; i++){
dfs(i,dep-);
}
}
int main()
{
for(int i = ; i <= n ; i ++){
dfs(i,n-);
}
printf("%lld\n",sum);
}
然后发现,4,13,41,131,428。。。。卡特兰数减去一。
再看了看数据很大又没有取模。直接Py写了组合数。
卡特兰数 H[n] = c(2*n,n)/(n+1);
代码:
comb = [[0 for i in range(212)] for i in range(212)]
for i in range(0,210):
comb[i][0] = comb[i][i] = 1;
for j in range(1,i):
comb[i][j] = comb[i-1][j] + comb[i-1][j-1];
n = int(input());
n+=1;
print(comb[2*n][n]//(n+1) - 1);
C题:
链接:https://ac.nowcoder.com/acm/contest/554/C
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
第一天可以产a吨粮食,第二天会变成前一天的a倍,以此类推。
n天后大臣准备把这些粮食尽可能多的平均分给b个城池
为了方便,每个城池分到的粮食都是整吨整吨哒!
剩下的粮食国王准备贪污
国王能贪到多少吨粮食呢?
输入描述:
输入的第一行为一个数字T(T<=100),表示数据输入的组数。
之后每行3个数字,分别表示 a, n, b(1<=a,n<= 1000,000,000;1<=b<=1000 )。
输出描述:
对于每组数据输出对应结果
输入
1
2 2 3
输出
1
快速幂取模。a^n % b;
不贴代码了 H:
链接:https://ac.nowcoder.com/acm/contest/554/H
来源:牛客网
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
输入描述:
输入数据为T组数据(1<=T<=10)。
每组数据输入包含三个数字N,A,B(1<=N<=1000000,1<=A<B<=N)。
输出描述:
对于每组数据,输出一个整数,表示从第A个人到第B个人之间有多少人站着。
输入
1
5 1 3
输出
2
思路:又是打表找规律题。首先确定一个位置pos,改变的次数是pos的因子数减1 次。(假设首先是蹲着)
打表:
int a[];
memset(a,,sizeof(a));
int op = ;
for(int i = ; i <= op ; i++ ){
for(int j = ; j <= i ; j++){
if(i%j == ){
a[i] ^= ;
}
}
}
for(int i = ; i <= op ; i++){
printf("%d ",a[i]);
if(!a[i])puts("");
}puts("");
很容易发现1的个数会每次+2。
求个前缀和就行了。
代码:
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define INF 2000000000
const LL mod = 1e9+;
int a[];
int main()
{
memset(a,,sizeof(a));
int p = ,k = ;
while(k <= ){
a[k++] = ;
for(int i = ; i < *p && k <= ; i++){
a[k++] = ;
}
p++;
}
for(int i = ; i <= ; i++){
a[i] += a[i-];
}
int t;scanf("%d",&t);
while(t--){
int n,x,y;
scanf("%d %d %d",&n,&x,&y);
printf("%d\n",a[y] - a[x-]);
}
}
/*
2
9 1 4
1000000 1 1000000
*/
I:
链接:https://ac.nowcoder.com/acm/contest/554/I
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
输入描述:
输入包含多组测试数据。
每组测试输入包含一组数字包含的整数个数n以及n个整数mi(1<=n<1000,0<=mi<=10000)给定的整数互不重复。
输出描述:
对于每组测试数据,输出一个整数,给定整数按升序排序时所需花销的最小值。
输入
4
3 1 5 4
输出
13 思路:
首先肯定交换的肯定是闭环上的数。比如说 4 3 1 2 5。第一个环是4-->2-->3-->1-->4,这几个位置上的数,交换一下位置可以得到递增的。环是以number-->pos[number]-->pos[pos[number]]....下去的。
比赛的时候爆WA了,说说赛中的想法。
赛中的时候想法就是肯定是用环中最小的数作为媒介去交换啊,记一个环的元素有k个,最小的数为Min,环的元素和为Sum。
肯定是拿Min去做n-1次交换啊,所以答案是(Sum-Min)+(k-1)*Min;即用最小的元素去跟其他的k-1个交换产生的价值。
没考虑到另外一种情况,举个例子:1 400 200 300,这个数组,环是400->300->200->400。那么我们拿200去换吗?肯定不是,显然用1作为媒介交换是最合适的。 所以有了第二种情况(赛后看了下AC的代码发现的思维误区),即拿数组中最小的元素作为媒介,去把当前环中的数交换成有序的。
记全部元素中最小的数是All_Min产生的代价是Min+Sum+(k-1)*All_Min。手推一下就OK的。
所以每次环增加的代价是这两种情况取小的那种。(说实话这题很质量啊,很考验思维。。哎还是我太菜了) 最后注意的是离散化一下数组,因为题目中给定的不是完全的1~n的数字。
代码:
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define INF 2000000000
const LL mod = 1e9+;
int mp[];
int main()
{
int a[],pos[],vis[];
int n;
while(~scanf("%d",&n)){
memset(mp,,sizeof(mp));
vector<int>vec;
int Min = ;
for(int i = ; i <= n ; i++){
scanf("%d",a+i);
vec.push_back(a[i]);
Min = min(a[i],Min);
pos[i] = i;//应该在的位置
}
sort(vec.begin(),vec.end());
for(int i = ; i < n ; i++){
mp[vec[i]] = i+;
}//离散化
LL sum = ;
memset(vis,,sizeof(vis));
for(int i = ; i <= n ; i++){
if(!vis[i]){
if(pos[i] != mp[a[i]]){
int be = i;
vector<int>v;
int nowsum = ;//存储当前环中元素和
while(!vis[be]){
v.push_back(a[be]);
vis[be] = ;
nowsum += a[be];
be = pos[mp[a[be]]];
}
sort(v.begin(),v.end());
int useself = (v.size()-)*v[]+nowsum;
int use_min_number = v[] + nowsum + (v.size()+)*Min;
//两种情况取小的那种,加到sums上。
sum += min(useself,use_min_number);
}
else{
vis[i] = ;
}
} }
cout<<sum<<endl;
}
}
/*
5
1 2 3 4 0
4
1 300 400 100
*/
哈尔滨工程大学ACM预热赛(A,C,H,I)的更多相关文章
- 哈尔滨工程大学ACM预热赛
https://ac.nowcoder.com/acm/contest/554#question A #include <bits/stdc++.h> using namespace st ...
- 哈尔滨工程大学ACM预热赛 补题
链接:https://ac.nowcoder.com/acm/contest/554/A来源:牛客网 小虎刚刚上了幼儿园,老师让他做一个家庭作业:首先画3个格子,第二行有2个格子,第三行有1个格子. ...
- 哈尔滨工程大学ACM预热赛 G题 A hard problem(数位dp)
链接:https://ac.nowcoder.com/acm/contest/554/G Now we have a function f(x): int f ( int x ) { if ( ...
- (2015年郑州轻工业学院ACM校赛题)H 五子棋
我们最后选题策略失败,选到五子棋这题,没想到这题非常麻烦,最后也没做出来! 比赛结束后发了题解再做才做出来! 不得不说 这题真的很麻烦 一个需要比较细致分类讨论的题目.判定棋盘是否合法应考虑如下几种情 ...
- 第六届acm省赛总结(退役贴)
前言: 这是我的退役贴,之前发到了空间里,突然想到也要在博客里发一篇,虽然我很弱,但是要离开了还是有些感触,写出来和大家分享一下,希望不要见笑.回来看看,这里也好久没有更新了,这一年确实有些懈怠,解题 ...
- [原]sdut2624 Contest Print Server (大水+大坑)山东省第四届ACM省赛
本文出自:http://blog.csdn.net/svitter 原题:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&am ...
- 2015浙江财经大学ACM有奖周赛(一) 题解报告
2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制 ...
- 第13届 广东工业大学ACM程序设计大赛 C题 平分游戏
第13届 广东工业大学ACM程序设计大赛 C题 平分游戏 题目描述 转眼间又过了一年,又有一届的师兄师姐要毕业了. 有些师兄师姐就去了景驰科技实习. 在景驰,员工是他们最宝贵的财富.只有把每一个人 ...
- ACM省赛及蓝桥总结,且随疾风前行,身后亦须留心
今年算是开始正式打比赛了,真正打起比赛来感觉的确是和平时训练不太一样,最重要的还是在心态和信心上. ACM省赛是拿下个银牌,昭哥上来就把K题金牌题给当签到题给签掉了,可惜我们没有利用好这一题.感觉第一 ...
随机推荐
- 根据导出的查询结果拼接字符串,生成sql语句并保存到txt文件中
import os os.chdir("C:/") path = os.getcwd() print(path) f = open("sql.csv") # p ...
- 三、thymeleaf模板引擎构建前台html, 后台使用 ModelAndView 和 Model 模型
项目源码:https://github.com/y369q369/springBoot.git -> thymeleaf 私聊QQ: 1486866853 1.pom.xml中 ...
- codeblock字体问题
有的时候在codeblock中打下划线,会显示空格, 这个时候可以修改一下字体 settings->editor->editor settings最上面的fonts框中选择choose,然 ...
- mysql数据库优化(一)
在实际项目中,通过设计表架构时,设计系统结构时,查询数据时综合提高查询数据效率 1.适当冗余 数据库在设计时遵守三范式,同时业务数据(对数据的操作,比如资料审核,对某人评分等)和基础数据(比如资料详情 ...
- uva-757-贪心
题意:有个人要去湖里钓鱼,总共有N个湖,排成一个序列,用字母P表示湖,从湖pi 到 pi+1(下一个湖)需要ti个五分钟. 并且,每个湖里可钓出来的鱼每过五分钟就减少di.如果产出的鱼小于等于di.那 ...
- Btrace官方教程-中文版
教程英文版来源:https://github.com/btraceio/btrace/blob/master/docs/usersguide.html BTrace用户指南 BTrace是一种安全,动 ...
- WEB日志分析工具(Webslizer和AWstats)
https://www.cnblogs.com/xiaowenshu/p/10030139.html#top
- java面试题复习(三)
21.静态嵌套类和内部类的不同? 答:静态嵌套类是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化.而通常的内部类需要在外部类实例化后才能实例化.//还是考的static的知识 ...
- 魔力Python——对象
Python之中,一切皆对象. 本文分为4部分: 1. 面向对象:初识 2. 面向对象:进阶 3. 面向对象:三大特性----继承,多态,封装 4. 面向对象:反射 0. 楔子 面向过程和面向对象的是 ...
- 500G !!史上最全的JAVA全套教学视频网盘分享 (JEECG开源社区)
500 G JAVA视频网盘分享(JEECG开源社区) [涵盖从java入门到深入架构,Linux.云计算.分布式.大数据Hadoop.ios.Android.互联网技术应有尽有] JEECG开源社区 ...