记录一下hdu的几道题
杭州电子科技大学程序设计竞赛 2016‘12-网络同步赛
前几天看到这个比赛,想着要是到时候没事就做一下,但是中午实在太困,加上水平太次,才a了4道题目。
说明:我是看ac人数多少的顺序来做题的。
1.1001 BigZhuGod的粉丝
没写输入与输出,看例子,找规律!注意一行字符输入的方法。我一般是用getline(cin, s),但是一般会得到'\n',可能需要先getchar()处理一下。
2. 1007 反差萌
看题意,输入2*n个数,然后排序,求和就完了!我刚开始一直无法ac,才发现,我只开了n大小的数组,而实际的输入大小是n*2的,这点注意一下。
3. 1002 递增数
这个题目,我认为有点难度,看完题目后,我就吓坏了,不知道怎么做!但是还得静下心来仔细分析!这不就是简单的数个数么。
跟这道题目挺相似的,https://leetcode.com/problems/k-th-smallest-in-lexicographical-order/ 这个也是不会做,好像现在也不会做哎!
分析:求长度为1的递增数的个数,长度为2,长度为3,由于最大1e8,长度最大为8,那么对于x = 1234,结果包含长度为3,2,1的递增数,首先考虑这个怎么计算。
长度为1的就是9个,长度为2,依次枚举首位的数字,由于是递增数,后续的数字,需要大于等于这个数字,那么,我们要求的可以转化为求长度为k,以a开头的递增数的个数,这个问题容易处理。
长度为1的,以a开头的递增数为10-a,长度为k的,以a开头的递增数包括:以a+1开头的,长度为k的和以a开头的,长度为k-1的递增数的和。这个问题就解决了,求长度为k的也很容易解决。
接下来考虑对于x= 1234, 如何求长度为4的递增数,第一位不能为0,所以第一位只能为1,接下来考虑第二位,基于第一位,要大于等于上一位,说以先求解[1,2),这个可以通过上面的方法,利用区间减法得到,然后接下来需要考虑的就是第二位为2的情况,依次往后考虑。
讲的有点乱,具体看代码:
/*
ID: y1197771
PROG: test
LANG: C++
*/
#include<bits/stdc++.h>
#define pb push_back
#define FOR(i, n) for (int i = 0; i < (int)n; ++i)
#define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
typedef long long ll;
using namespace std;
typedef pair<int, int> pii;
const int maxn = 2e3 + ;
map<pii, ll> ma;
ll work(int x, int len) {
if(len <= || x == ) return ;
if(len == ) return - x;
if(len == ) {
ll t = ;
if(x + <= ) t += work(x + , len);
t += work(x, len - );
return ma[{x, len} ] = t;
}
ll res = ;
if(x + <= ) res += work(x + , len);
res += work(x, len - );
return ma[{x, len} ] = res;
}
void solve() {
int x;
ll res = ;
cin >> x;
int len = ;
int t = x;
int lb = x;
vector<int> v;
while(t) {
v.pb(t % );
len ++; t /= ;
}
reverse(v.begin(), v.end());
for (int i = ; i < len; i++)
res += work(, i);
int lst = ;
int i = ;
for (i = ; i < v.size(); i++) {
if(v[i] <= || v[i] < lst) break;
res += work(lst, len - i) - work(v[i], len - i);
lst = v[i];
}
if(i == v.size()) res++;
cout << res << endl; }
int main() {
freopen("test.in", "r", stdin);
//freopen("test.out", "w", stdout);
//ios::sync_with_stdio(0);
//cin.tie(0); cout.tie(0);
int _; cin >> _;
while(_--)
solve();
return ;
}
4. 1004 我要拿走你的蜡烛
简单的暴力枚举。
/*
ID: y1197771
PROG: test
LANG: C++
*/
#include<bits/stdc++.h>
#define pb push_back
#define FOR(i, n) for (int i = 0; i < (int)n; ++i)
#define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
typedef long long ll;
using namespace std;
typedef pair<int, int> pii;
const int maxn = 1e3 + ;
int n, m;
int a[];
int tag[] = {, , , };
int s[];
void solve() {
string st;
cin >> n >> m;
for (int i = ; i < n; i++) {
cin >> st;
if(st[] == 'F') a[i] = ;
if(st[] == 'I') a[i] = ;
if(st[] == 'D') a[i] = ;
if(st[] == 'E') a[i] = ;
}
bool f = ;
for (int i = ; i < ( << n); i++) {
int cost = ;
memset(s, , sizeof s);
//a1 = a2 = a3 = a4 = 0;
for (int j = ; j < n; j++) {
if(i & ( << j)) {
cost += tag[a[j] ];
s[a[j] ]++;
}
}
//cout << i << " " << cost << endl;
if(cost > ) continue;
//for (int j = 0; j < 4; j++) cout << s[j] << endl;
int d = s[] + * s[]; int res = ( + d) * s[] + ( + d) * s[];
if(res >= m) {
f = ; break;
}
}
if(f) cout << "Yes" << endl;
else cout << "No" << endl;
}
int main() {
freopen("test.in", "r", stdin);
//freopen("test.out", "w", stdout);
ios::sync_with_stdio();
cin.tie(); cout.tie();
int _; cin >> _;
while(_--)
solve();
return ;
}
这个做完,大概就4:15,然后看了看1003 洗衣服,简单分析下,一看时间到了,也没想出怎么做。中间还耽搁了大概1小时,去睡觉,最后结果算一般把,估计正常做也就这个水平!
记录一下hdu的几道题的更多相关文章
- HDU 4810 这道题 是属于什么类型?
统计每一位出现1的个数 求组合数 直接贴代码 #include <iostream> #include <cstdio> #include <cmath> #in ...
- hdu 1885 Key Task (三维bfs)
题目 之前比赛的一个题, 当时是崔老师做的,今天我自己做了一下.... 还要注意用bfs的时候 有时候并不是最先到达的就是答案,比如HDU 3442 这道题是要求最小的消耗血量伤害,但是并不是最先到 ...
- 【HDU 4547 CD操作】LCA问题 Tarjan算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4547 题意:模拟DOS下的cd命令,给出n个节点的目录树以及m次查询,每个查询包含一个当前目录cur和 ...
- HDU 3468 Treasure Hunting(BFS+网络流之最大流)
题目地址:HDU 3468 这道题的关键在于能想到用网络流.然后还要想到用bfs来标记最短路中的点. 首先标记方法是,对每个集合点跑一次bfs,记录全部点到该点的最短距离.然后对于随意一对起始点来说, ...
- HDU 4512 最长公共上升子序列
各种序列复习: (1)最长上升子序列. 1.这个问题用动态规划就很好解决了,设dp[i]是以第i个数字结尾的上升子序列的最长长度.那么方程可以是dp[i]=max(dp[j]+1).(j<i). ...
- HDU 4358
看了题解那个弱化版后,马上就去做了HDU 3333这道题,发现有可用的地方.于是往这方面想,主要是处理如何确定一个数出现K次的问题.想到了从左往右把每个数出现的次数记下来,但感觉不是这样,呃,再看别人 ...
- PE刷题记录
PE刷题记录 PE60 / 20%dif 这道题比较坑爹. 所有可以相连的素数可以构成一张图,建出这张图,在其中找它的大小为5的团.注意上界的估算,大概在1W以内.1W内有1229个素数,处理出这些素 ...
- hdu 1573 X问题
数论题,本想用中国剩余定理,可是取模的数之间不一定互质,用不了,看到网上有篇文章写得很好的:数论——中国剩余定理(互质与非互质),主要是采用合并方程的思想: 大致理解并参考他的代码后便去试试hdu上这 ...
- POJ 1904 HDU 4685
这两道题差不多,POJ这道我很久以前就做过,但是比赛的时候居然没想起来.. POJ 这道题的题意是,N个王子每个人都有喜欢的公主,当他们选定一个公主结婚时,必须是的剩下的人也能找到他喜欢的公主结婚. ...
随机推荐
- poj 2688 状态压缩dp解tsp
题意: 裸的tsp. 分析: 用bfs求出随意两点之间的距离后能够暴搜也能够用next_permutation水,但效率肯定不如状压dp.dp[s][u]表示从0出发訪问过s集合中的点.眼下在点u走过 ...
- 基数树(radix tree)
原文 基数(radix)树 Linux基数树(radix tree)是将指针与long整数键值相关联的机制,它存储有效率,并且可快速查询,用于指针与整数值的映射(如:IDR机制).内存管理等.ID ...
- Winform开发--控件
WinForm控件开发总结目录 WinForm控件开发总结目录 WinForm控件开发总结(一)------开篇 WinForm控件开发总结(二)------使用和调试自定义控件 WinForm控件开 ...
- 用户环境配置文件/etc/profile
当用户在登录界面正确地输入用户名和密码后,系统就开始为用户构建一个可以使用的用户环境.用户环境包括用户使用的环境变量.快捷键设置及命令别名等.这些设置大多是通过运行全局用户配置文件/etc/profi ...
- Linux Shell之top命令
TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中C ...
- 关于删除7z历史解压路径
目前7zip尚无此功能,只能从注册表入手了,7zip历史记录保存在注册表 HKEY_CURRENT_USER\Software\7-Zip\FM 下的CopyHistory和FolderHistory ...
- URL请求过程
一.URL(Uniform Resource Locator)统一资源定位符,是可以从互联网上得到的资源的位置和访问方法的一种简洁表示,是互联网上标准资源的地址.互联网上的每一个文件都有一个唯一的UR ...
- Japan
Japan plans to welcome the ACM ICPC World Finals and a lot of roads must be built for the venue. Jap ...
- DIH中添加不同的数据源
需求:从mysql数据库中读取一个知识记录,从记录表中的字段值中获取一个文件路径,读取xml文件,xml文件中可能包含多个文档内容.建立索引. xml文件样例: <?xml version=&q ...
- java适配器模式随笔记
今天学习了一下java中的适配器模式,在这里做个记录,方便以后查看 什么是适配器,适配就是连接源到目标的中间件,简单的例子就是我们的港水货手机充电器是大三角,我们想要在大陆正常使用我们需要一个转接充电 ...