这一次都主要是贪心练习

练习地址http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26733#overview

Problem APOJ 1328

对于每一个点,可以找到他在x轴上的可行区域,这样的话就变为了对区间的贪心。

 #include<iostream>
#include<stdio.h>
#include<string.h>
#include<map>
#include<vector>
#include<set>
#include<stack>
#include<queue>
#include<algorithm>
#include<cmath>
#include<stdlib.h>
using namespace std;
#define MAX(a,b) (a > b ? a : b)
#define MIN(a,b) (a < b ? a : b)
#define MAXN 10000001
#define INF 1000000007
#define mem(a) memset(a,0,sizeof(a))
#define eps 1e-15 struct node{double s,t;}ma[];
double R;
int N; const int island_max=; void get_len(int index,double a,double b)
{
double temp = sqrt(R*R - b*b);
ma[index].s=a-temp;
ma[index].t=a+temp;
} int cmp(node a,node b)
{
if(a.t!=b.t)return (a.t < b.t);
return (b.s > a.s);
} int main()
{
int ca = ;
while(~scanf("%d%lf",&N,&R) && (N || R))
{
int i;
double a,b;
int flag = ;
for(i=;i<N;i++)
{
scanf("%lf %lf",&a,&b);
if(b<=R && !flag)
{
get_len(i,a,b);
}
else flag = ;
}
if(flag){printf("Case %d: -1\n",ca++);continue;}
sort(ma,ma+N,cmp);
double key = ma[].t;
int ans=;
for(i=;i<N;i++)
{
if(ma[i].s-key >eps)
{
key = ma[i].t;
ans ++;
}
}
printf("Case %d: %d\n",ca++,ans);
}
return ;
}

Problem B  POJ 2109

可以拿double水过pow(p,1/n)

 //Memory Time
//280K 0MS #include<iostream>
#include<math.h>
using namespace std; int main(void)
{
double n,p;
while(cin>>n>>p)
cout<<pow(p,1.0/n)<<endl; //指数的倒数就是开n次方
return ;
}

另外,看大神的二分+大数乘法

http://paste.ubuntu.com/5906043/

然后我也写了一个(在章爷的指导下终于AC了)

 #include <stdio.h>
#include <math.h>
#include <string.h>
#define MAX(a,b) (a)>(b)?(a):(b) void strrevv(char s[])
{
int i=,j=strlen(s)-;
while(i<j)
{
int a = s[i];
s[i] = s[j];
s[j] = a;
i++;j--;
}
} char ans[];
char* huge_multiply(char s[],char t[])
{
int a[];
memset(a, , sizeof(a));
memset(ans,,sizeof(ans));
strrevv(s);strrevv(t);
int lens = strlen(s), lent = strlen(t),i,j;
for(i=;i<lens;i++)
{
for(j=;j<lent;j++)
{
a[i+j] += (s[i] - '')*(t[j] - '');
}
}
i=;
while(a[i] == )
i--;
for(j=;a[j] || j<=i;j++)
{
a[j+]+=a[j]/;
a[j] = a[j]%;
}
for(i=;i<j;i++)
{
ans[i]=a[i]+'';
}
strrevv(ans);
strrevv(s);strrevv(t);
return ans;
} char res[]={};
char re[]={};
char* power(char p[],int n)
{
if(n == )return p;
char* pstr;
pstr = power(p,n/);
strcpy(re,pstr);
strcpy(res,pstr);
pstr = huge_multiply(re, res);
strcpy(re,pstr);
if(n%)pstr = huge_multiply(re, p);
strcpy(re, pstr);
return re;
} // int compare_str(char *s, char *t)
{
int lens = strlen(s);
int lent = strlen(t);
if(lens != lent)return lens < lent ? - : ;
while(*s == *t && *s){s++;t++;}
if(!(*s))return ;
return *s < *t ? -: ;
} int b_search(int n, char* p)
{
char str[]={};
char *pstr;
int l = ,r = ;
int lenp = strlen(p);
int ans = ,compare;
while(r - l > )
{
ans = (l+r)/;
sprintf(str,"%d", ans);
int lenstr = strlen(str)-;
if(lenstr*n > lenp){r=ans;continue;}
pstr = power(str, n);
compare = compare_str(pstr, p);
if(compare == )break;
else if(compare < )l = ans;
else r = ans;
// printf("%d %d %d\n",l,r,ans);
}
if(l == r)return ans - ;
return ans;
} int main()
{
int n;
char pstr[]={};
while(~scanf("%d %s", &n, pstr))
{
char *p = pstr;
printf("%d\n", b_search(n, p));
}
return ;
}

Problem CPOJ 2586

由于每个月的亏损或是盈利是固定的,所以我们按贪心的思想,为了让亏损的影响到更多的月份,我们让亏损的尽量放在后面,又由于亏损金额是不会变化的,所以可以分类处理盈利s,亏损d

如果五个月内只有x个月是亏损的                                                 盈利

x = 1    ssssd,ssssd,ss如果是这样的话,只需要d>4s                  10s-2d

x = 2    sssdd,sssdd,ss                               2*d>3*s             8s-4d

x = 3    ssddd,ssddd,ss                              3*d>2*s             6s-6d

x = 4    sdddd,sdddd,sd                             4*d>s                 3s-9d

x = 5 一定亏损

当然也可以枚举过(一共也就2^12中情况)

 #include<stdio.h>
#include<stdlib.h> int main()
{
int s, d, re;
while(scanf("%d%d",&s, &d)==)
{
if(*s-d<)
re=*s-*d;
else if(*s-*d<)
re=*s-*d;
else if(*s-*d<)
re=*s-*d;
else if(s-*d<)
re=*s-*d;
else
re=-;
if(re<)
printf("Deficit\n");
else
printf("%d\n", re);
}
return ;
}

Problem D   URAL 1303

感觉自己没有错了,还是WA,不做了

ural 1303 Minimal Coverage(贪心)

Problem E  SGU 195

题木意思就是说第i+1个的上司是num[i],而一个人要么给下属发钱,要么从上司拿钱,问这个图里面最多可以拿到多少钱。

由于num[i]是下属是i+1所以可以从后往前扫一遍(也就是从叶子往根找),同时标记一下就可以了

 #include<iostream>
#include<stdio.h>
#include<string.h>
#include<map>
#include<vector>
#include<set>
#include<stack>
#include<queue>
#include<algorithm>
#include<cmath>
#include<stdlib.h>
using namespace std;
#define MAX(a,b) (a > b ? a : b)
#define MIN(a,b) (a < b ? a : b)
#define MAXN 500005
#define INF 1000000007
#define mem(a) memset(a,0,sizeof(a))
#define eps 1e-15 int vis[MAXN], p[MAXN], ans[MAXN];
int N; int main()
{
mem(vis);
scanf("%d",&N);
int i,a;
for(i=;i<=N;i++)
{
scanf("%d",&a);
p[i]=a;
}
int num=;
for(i=N;i>=;i--)
{
if(!vis[i] && !vis[p[i]])
{
vis[p[i]] = vis[i] = ;
ans[num++] = i;
}
}
printf("%d\n",num*);
sort(ans,ans+num);
for(i=;i<num;i++)
{
printf("%d%c", ans[i],i==num-?'\n':' ');
}
return ;
}

Problem F  SGU 171

不是很好做,是很不好做。题解见http://www.cnblogs.com/gj-Acit/p/3213370.html

Contest 7.21(贪心专练)的更多相关文章

  1. 10-19 dp专练

    dp专练,终于克服了一次自己对dp的恐惧,磕出来一道题. 得分情况: T1:0 T2:0 T3:0 emmmm,磕出来的题是T2,但是因为初始化和int long long的原因爆零了 T1:n只狼排 ...

  2. P1251 递推专练3

    递推专练3 描述 Description 圆周上有N个点.连接任意多条(可能是0条)不相交的弦(共用端点也算相交)共有多少种方案? 输入格式 Input Format 读入一个数N.<=N< ...

  3. contest7.20(暴力专练)

    此次练习的地址:  http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26732#overview 密码 acmore Problem A(P ...

  4. java 集合专练

    handsomecui的blog地址为:http://www.cnblogs.com/handsomecui/ 本人网站为:handsomecui.top 引言:本次主要练习单列集合:Collecti ...

  5. 2016/12/21 dplの课练

    1.将/etc/passwd第行的最后一段全部改成/bin/bash cat 1 |sed -n '1,$p' |egrep '.*:' -o |sed 's/$/\bin\/bash/' 2.将/e ...

  6. 2014 Multi-University Training Contest 1/HDU4864_Task(贪心)

    解题报告 题意,有n个机器.m个任务. 每一个机器至多能完毕一个任务.对于每一个机器,有一个最大执行时间Ti和等级Li,对于每一个任务,也有一个执行时间Tj和等级Lj.仅仅有当Ti>=Tj且Li ...

  7. 2016.4.9 NOI codevs动态规划专练

    1.NOI 最大子矩阵 1:最大子矩阵 总时间限制:  1000ms 内存限制:  65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 ...

  8. 2016.4.3 动态规划NOI专练 王老师讲课整理

    1.6049:买书 总时间限制:  1000ms 内存限制:  65536kB 描述 小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元. 问小明有多少种买书方案?(每种书可购买 ...

  9. dp专练

    dp练习. codevs 1048 石子归并 区间dp #include<cstdio> #include<algorithm> #include<cstring> ...

随机推荐

  1. 函数buf_LRU_old_adjust_len

    调整LUR_old位置,放到八分之五位置,是新的,后八分之三是旧的 512个页全变成新的,然后从后往前数,数到8分之3,设置为旧的 /********************************* ...

  2. 使用Jquery promise 动态引入js文件

    动态加载一个js得方式很多,如下方式: /** *一般方式加载 */ function normalLoadScript(url) { var node = document.createElemen ...

  3. PHPnow 升级后 PHP不支持GD、MySQL

    来自http://tunps.com/php-unsupport-gd-and-mysql-after-upgrade-phpnow 最近磁盘格式化误操作后,最近两天都在忙于数据恢复,现在才恢复正常. ...

  4. UVa 10892 (GCD) LCM Cardinality

    我一直相信这道题有十分巧妙的解法的,去搜了好多题解发现有的太过玄妙不能领会. 最简单的就是枚举n的所有约数,然后二重循环找lcm(a, b) = n的个数 #include <cstdio> ...

  5. Java知识点:琐碎知识点(2)

    49个关键字一览 abstract default if private this boolean do implements protected throw break double import ...

  6. NSIS 2.0界面快速入门

    NSIS 2.0 版本支持定制的用户界面.所谓的 Modern UI(下称 MUI) 就是一种模仿最新的 Windows 界面风格的界面系统.MUI 改变了 NSIS 脚本的编写习惯,它使用 NSIS ...

  7. LeetCode: 3SumClosest

    Title : Given an array S of n integers, find three integers in S such that the sum is closest to a g ...

  8. Oracle 闪回特性(FLASHBACK DATABASE)

    --===================================== -- Oracle 闪回特性(FLASHBACK DATABASE) --======================= ...

  9. linux下打开chm文件的方法

    windows中,通常情况下,chm文件可以使用系统自带的程序打开,但是linux就没有那么幸运了,那么,如何在linux下打开chm 文件呢?有小编来为您介绍介绍,本篇,小编以ubuntu环境为例 ...

  10. 【转】eclipse中egit插件使用

    原文网址:http://my.oschina.net/songxinqiang/blog/192567 eclipse和git这个两个工具的使用人数都是相当多的,在eclipse里面也有egit插件来 ...