bestcoder hdu赛后能看别人代码吗

HDU 5037 FROG 贪心 2014北京网络赛F
题目链接;点击打开链接题意:有一条小河长为M的小河,可以看作一维轴,小河里存在N个石头,有一个每次能跳L米
题目链接;点击打开链接
题意:有一条小河长为M的小河,可以看作一维轴,小河里存在N个石头,有一个每次能跳L米的小青蛙,随意添加石头保证青蛙能从头跳到尾的,问青蛙使用最优策略跳到对岸最多需要多少次。
思路:不妨假设青蛙每个石头都要经过一次,用step表示青蛙上一次跳的步长,每跳一次对目前点到下一点的距离和step的和与L做比较,如果小与,证明青蛙可以一次跳到这,更新step和青蛙位置,cnt保持不变,若大于,证明青蛙至少需要再跳一次,若lenth&=l,则直接跳,更新step=lenth,cnt++;若lenth&l,则让青蛙以l+1-step,step,的周期跳,易证可以保证解最优,然后相当于把石头向后平移x*(l+1)个单位。and so on。详情请看代码,非常明了~比赛的时候手残wa到哭!!!
#include &cstdio&
#include &iostream&
#include &algorithm&
#include &cmath&
int data[200010],T,n,m,l;
void slove()
sort(data,data+n+1);
int step=l,now=0,cnt=0;
for(int i=0;i&=n;i++){
int lenth=data[i]-
if(lenth==0)
if(lenth+step&=l){
now=data[i];
step=lenth+
else if(lenth&=l){
now=data[i];
else if(lenth&l){
int tp=lenth%(l+1);
cnt+=(lenth/(l+1))*2;
if(tp+step&=l){
now=data[i];
now=data[i];
printf(&%d\n&,cnt);
int main()
//freopen(&data.in&,&r&,stdin);
int cas=0;
scanf(&%d&,&T);
while (T--){
printf(&Case #%d: &,++cas);
scanf(&%d%d%d&,&n,&m,&l);
for(int i=0;i&n;i++){
scanf(&%d&,data+i);
data[n]=m;
上一篇hdu 5017 ellipsoid
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
核心技术类目
水出好心情(6)
暑期训练(一)线性dp(2)
[紫书]数据结构(1)
矩阵快速幂(5)
计算几何(4)
流水的帐(1)
西安邀请赛2014(1)
中国剩余定理(1)
模拟退火(1)
Area of Mushroom
凸包 第八次多校(140)
hud 1241 Oil Deposits(121)
hdu 4938 Seeing People
排序+二分查找(91)
POJ 1273 Drainage Ditches 网络流基础(83)
某邻居的WIFI密码(83)
HDU 1495 非常可乐
HDU 4951 Multiplication table 数论(53)
UVa210 Concurrency Simulator(49)
hdu 4990 Reading comprehension 矩阵快速幂or数论 bestcoder round 8b(38)
hdu 3506 monkey party(环形dp)(34)
UVa210 Concurrency Simulator(2)
凸包模板(注意去重)(2)
hdu 5017 ellipsoid
模拟退火(0)
为什么我写的文章没了?(0)
hud 4961 Boring Sum 数论(处理因子的方法)(0)
hud 4970 Killing Monsters 模拟(0)
hdu 4969 ( Just a Joke )数学题(0)
hdu 4965 Fast Matrix Calculation 矩阵快速幂(0)
hdu 4948 kingdom(0)
HDU 4849 Wow! Such City! 最短路(0)
alpc_paul:
@u:不太稳定啊
uva网站进不去是怎么回事
alpc_paul:
@asdfgh0308:蛤蛤,我也是,对板的性能不是很了解。
asdfgh0308:
今天被凸包模板坑惨了……光会贴模板果然是要悲剧
(责任编辑:赵红霞)
------分隔线----------------------------
CSAPP lab4...
SICP 习题 1.46 要求我们写一个过程iterative-improve,它以两个过程为...
HDU 5024 Wang Xifengs Little Plot (搜索)...
#! /bin/doi=`df -h | egrep /mnt/D| awk {print $5} | cut -d % -f1 -`i...
对于xcode6模拟器运行程序后不显示键盘。只需要打开模拟器,在...
安装个SVN服务器电脑运行慢不说,加上配置也是超级麻烦。这个...[BestCoder] Round #11
输出Yes只有一种情况.
#define rd(x) scanf(%d,&x)
#define rd2(x,y)
scanf(%d%d,&x,&y)
#define rd3(x,y,z) scanf(%d%d%d,&x,&y,&z)
const int inf=0x3f3f3f3f;
int dx[8]={0,0,-1,1,1,1,-1,-1};
int dy[8]={1,-1,0,0,-1,1,-1,1};
//关键点是中点吧
int n,m,x,y;
int main()
while(cin&&n&&m&&x&&y)
if(2*x==n&&2*y==m)
cout&<yes<
1002http://acm./showproblem.php?pid=5055给出n个数字(每个数字0~9),用这n个数字组成一个数,要求不能有前导0,且最后一位必须是奇数。不能组成则输出-1.可以构造出数的情况有: 只有一个数,且该数是奇数;n个数中大于0的数至少有2个,且n个数中存在奇数。如果能满足的话,那么最小的奇数做数的最后一位,剩下的数从大到小排在前面就是所求的数。写的时候逻辑有点乱.....这类题写的时候一定得考虑全面一些。#include
#define rd(x) scanf(%d,&x)
#define rd2(x,y)
scanf(%d%d,&x,&y)
#define rd3(x,y,z) scanf(%d%d%d,&x,&y,&z)
const int inf=0x3f3f3f3f;
int dx[8]={0,0,-1,1,1,1,-1,-1};
int dy[8]={1,-1,0,0,-1,1,-1,1};
const int maxn=102;
int num[maxn];
bool cmp(int a,int b)
return a&b;
int main()
while(rd(n)!=EOF)
minodd=100;//最小的奇数
int p=-1;//最小的奇数的位置
int cnt=0;//大于0的数字有多少个
for(int i=1;i&=n;i++)
rd(num[i]);
if(num[i]&0)
if(num[i]&1)
if(minodd&num[i])
minodd=num[i];
if(hasodd)
cout&<num[1]<=2&&hasodd)
swap(num[p],num[n]);
sort(num+1,num+n,cmp);
for(int i=1;i&=n;i++)
cout&1003&给出一个只有小写字母组成的字符串,然后给出一个数字k,问有多少子串满足
该子串中相同字母出现的次数不超过k。比如有一个子串 abac k=2的话,a的次数=2不超过k,b,c的次数均为1,也不超过k,所以这个子串就是符合要求的.一个长度为n的字符串,子串一共有n(n+1)/2个,题目中n是100000,直接枚举肯定不行。一开始想的也是枚举,枚举每个位置,判断以该位置开头的子串有多少个,两重循环,第二重循环就是长度了,一开始以为长度最多就是26(26个字母),复杂度还可以,但是忘了k的事...k不一定等于1啊,有可能很大....所以悲剧了,果断超时..看到解题报告是 也是枚举每个位置,统计的则是以该位置为结尾的最大子串的长度,则是以该位置结尾的所有子串的个数,这个好理解,比如k=2,
bcca,当位置为a时,满足条件的最大子串为 bcca,长度为4,那么满足的所有子串的个数也为4,分别为
a。开辟两个指针,一个是枚举的位置,一个是满足该位置的最大串的起始位置,处治为该串的第一个位置。mapmp,记录每个字母出现的次数.下面以具体例子来说明是怎么工作的吧,解释不清楚.....比如串
k=2一开始位置为1, &#39;a&#39;,起始指针start为1,mp[&#39;a&#39;]++,
该值满足&=k,ans+=
;即ans+=1,对应的串为a后来位置为2,&#39;b&#39;,
起始指针start为1, mp[&#39;b&#39;]++,
满足条件,
ans+= 2-start+1;
即ans+=2,对应的串为
ab后来位置为3,也满足条件,ans+=3,对应的串为
abb后来位置为4, 也满足条件,ans+=4;对应的串为 c bc bbc abbc后来位置为5, mp[&#39;b&#39;]++,这时候mp[b]=3,
3&k,不符合条件,原因是b这个字母多了一个,要想以该位置为结尾,那么就得从前面去掉一个b,要求最大串,所以去掉最前面的一个b,同时更新起始位置, 这时候起始位置还是1,要想符合条件,就得移动该指针,mp[&#39;a&#39;]--,这是起始指针start对应的位置,start++, 这时候start=2,对应的字母为b,找到第一个b了,要把它去掉,所以再执行一次 mp[&#39;b&#39;]--,start++, 这时候start=3, 符合题意了, 满足的最大串为
ans+= 5-start+1,即ans+=3 ,对应的子串为
bcb后来同理....从上面流程中可以看出start指针是一直往前的,这个效率比前面说的那个要高,有些位置满足的子串数可以0(1)来计算出#include
#define rd(x) scanf(%d,&x)
#define rd2(x,y)
scanf(%d%d,&x,&y)
#define rd3(x,y,z) scanf(%d%d%d,&x,&y,&z)
const int inf=0x3f3f3f3f;
int dx[8]={0,0,-1,1,1,1,-1,-1};
int dy[8]={1,-1,0,0,-1,1,-1,1};
char s[100004];
int main()
while(t--)
mp.clear();
scanf(%s,s+1);
len=strlen(s+1);
int start=1;
for(int i=1;i&=i++)
mp[s[i]]++;
if(mp[s[i]]&k)
while(s[start]!=s[i])
mp[s[start]]--;
mp[s[start]]--;
ans+=i-start+1;
printf(%I64d
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。BestCoder121002.Helphim(hdu5059)解题报告 - 好代码编程网
BestCoder121002.Helphim(hdu5059)解题报告
题目链接:http://acm./showproblem.php?pid=5059
题目意思:就是输入一行不多于 100 的字符串(除了'\n' 和 '\r' 的任意字符),问是否是合法的整数,如果是的话问是否在[a, b] 范围内,是则输出 YES,否则输出 NO
合法的整数:(1)非负整数:只有数字,没有前导0
& & & & & & (2)负数:负号后面只能跟着数字,负号前没有任何字符
& & &首先这条题感觉不是出得太好,不过都是硬着头皮学人家做啦。反正一些很变态的数据可能还是过不了,但却AC的。
& & &模拟题一般都是比较恶心的!!!
& & &AC 代码:
#include &iostream&
#include &cstdio&
#include &cstdlib&
#include &cstring&
#include &string&
using namespace
typedef __int64 LL;
inline LL judge(string s, int sign, int st)
LL num = 0;
for (int i = i & s.size(); i++)
num = num * 10 + (s[i]-'0');
int main()
int len, a,
while (getline(cin, s))
scanf("%d%d", &a, &b);
getchar();
len = s.size();
int flag = 0;
if (s[0] == '-')
for (int i = 1; i & i++)
if (s[i] & '0' || s[i] & '9')
for (int i = 0; i & i++)
if (s[i] & '0' || s[i] & '9')
// 特判0的几种情况
if (s[0] == '0' && len != 1)
if (s[0] == '0' && len == 1)
if (s[0] == '-' && s[1] == '0')
if (!flag)
printf("NO\n");
// 处理到这里就已经是合法整数了
LL ans = 0;
if (s[0] == '-')
ans = judge(s, -1, 1);
ans = judge(s, 1, 0);
if (len == 0 || len &= 12 || ans & a || ans & b)
printf("NO\n");
printf("YES\n");
& & &一直搞不明白更改成这样为什么是错的!!!空闲再想~~~
& & WA~~~WA ~~~~wa ~~~wa
1 #include &iostream&
2 #include &cstdio&
3 #include &cstdlib&
4 #include &cstring&
5 #include &string&
6 using namespace
8 typedef __int64 LL;
10 inline int check(string s, int st)
for (int i = i & s.size(); i++)
if (s[i] & '0' || s[i] & '9')
23 inline LL judge(string s, int sign, int st)
LL num = 0;
for (int i = i & s.size(); i++)
num = num * 10 + (s[i]-'0');
32 int main()
while (getline(cin, s))
scanf("%d%d", &a, &b);
getchar();
int flag = 0;
if (s[0] == '-')
flag = check(s, 1);
flag = check(s, 0);
if (s[0] == '0' && s.size() != 1)
if (s[0] == '0' && s.size() == 1)
if (s[0] == '-' && s[1] == '0')
if (!flag)
printf("NO\n");
LL ans = 0;
if (s[0] == '-')
ans = judge(s, -1, 1);
ans = judge(s, 1, 0);
if (s.size() == 0 || s.size() &= 12 || ans & a || ans & b)
printf("NO\n");
printf("YES\n");
.Net 文章一周点击
.Net 文章一月点击
HaoGongJu.Net ( 好代码 ) All Rights Reserved原题大致上就是检测一系列进程之间是否存在循环依赖的问题,形如: a-&b-&c-&a, &a-&a ,都行成了循环依赖,事实上可以视为&检测链表中是否存在环&
#include &iostream&
#include &set&
#include &cstring&
int main()
int procs[10000];
int nProc, nD
while( cin && nProc && nDep )
memset(procs,0,10000);
set&int& idS
bool hasCircle =
for( ; nDep&0; --nDep )
cin && a &&b;
idSet.insert(a);
idSet.insert(b);
if( a == b )
hasCircle =
procs[a] =
if( !hasCircle )
for( set&int&::iterator ii = idSet.begin();
ii != idSet.end();
bool visit[10000] = {false};
int p = procs[*ii];
while( p && visit[p] == false )
visit[p] =
p = procs[p];
hasCircle =
if( hasCircle )
cout && "NO" &&
cout && "YES" &&
阅读(...) 评论()

我要回帖

更多关于 bestcoder hack 的文章

 

随机推荐