Contest 7.21(贪心专练)
这一次都主要是贪心练习
练习地址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(贪心专练)的更多相关文章
- 10-19 dp专练
dp专练,终于克服了一次自己对dp的恐惧,磕出来一道题. 得分情况: T1:0 T2:0 T3:0 emmmm,磕出来的题是T2,但是因为初始化和int long long的原因爆零了 T1:n只狼排 ...
- P1251 递推专练3
递推专练3 描述 Description 圆周上有N个点.连接任意多条(可能是0条)不相交的弦(共用端点也算相交)共有多少种方案? 输入格式 Input Format 读入一个数N.<=N< ...
- contest7.20(暴力专练)
此次练习的地址: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26732#overview 密码 acmore Problem A(P ...
- java 集合专练
handsomecui的blog地址为:http://www.cnblogs.com/handsomecui/ 本人网站为:handsomecui.top 引言:本次主要练习单列集合:Collecti ...
- 2016/12/21 dplの课练
1.将/etc/passwd第行的最后一段全部改成/bin/bash cat 1 |sed -n '1,$p' |egrep '.*:' -o |sed 's/$/\bin\/bash/' 2.将/e ...
- 2014 Multi-University Training Contest 1/HDU4864_Task(贪心)
解题报告 题意,有n个机器.m个任务. 每一个机器至多能完毕一个任务.对于每一个机器,有一个最大执行时间Ti和等级Li,对于每一个任务,也有一个执行时间Tj和等级Lj.仅仅有当Ti>=Tj且Li ...
- 2016.4.9 NOI codevs动态规划专练
1.NOI 最大子矩阵 1:最大子矩阵 总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 ...
- 2016.4.3 动态规划NOI专练 王老师讲课整理
1.6049:买书 总时间限制: 1000ms 内存限制: 65536kB 描述 小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元. 问小明有多少种买书方案?(每种书可购买 ...
- dp专练
dp练习. codevs 1048 石子归并 区间dp #include<cstdio> #include<algorithm> #include<cstring> ...
随机推荐
- Java 基础之认识 Annotation
Java 基础之认识 Annotation 从 JDK 1.5 版本开始,Java 语言提供了通用的 Annotation 功能,允许开发者定义和使用自己的 Annotation 类型.Annotat ...
- disable-linux-firewall-under-centos-rhel-fedora
http://www.cyberciti.biz/faq/disable-linux-firewall-under-centos-rhel-fedora/
- ZOJ 3607 Lazier Salesgirl(贪心)
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3607 题意:一个卖面包的小姑娘,给第i个来买面包的人的价格是pi, ...
- 如何使java中double类型不以科学计数法表示
在java中,把一个double或者BigDecimal的小数转换为字符串时,经常会用科学计数法表示,而我们一般不想使用科学计数法,可以通过:DecimalFormat a = new Decimal ...
- 玩转EasyUi弹出框
这两天在搞EasyUi的弹出框,弹出框之前也搞过很多个版本,总是觉得不那么完美,刚好最近有时间,就往多处想了想,功能基本上达到我的预期,并且在开发过程中遇到很多小技巧,特撰文如下. 走起:在EasyU ...
- LA 5846 (计数) Neon Sign
从反面考虑,统计非单色三角形的个数. 如果从一个点出发两条不同颜色的边,那么这三个点一定构成一个非单色三角形. 枚举一个顶点,统计从这个点出发的红边的个数a[i]和蓝边的个数n - 1 - a[i], ...
- BZOJ2226: [Spoj 5971] LCMSum
题解: 考虑枚举gcd,然后问题转化为求<=n且与n互质的数的和. 这是有公式的f[i]=phi[i]*i/2 然后卡一卡时就可以过了. 代码: #include<cstdio> # ...
- phonegap archive 报错 Cordova/CDVViewController.h' file not found
在BuildSettings->Header Search Paths 增加如下路径,问题解决 $(OBJROOT)/UninstalledProducts/include "$(O ...
- 省常中模拟 Test3 Day1
tile 贪心 题意:给出一个矩形,用不同字母代表的正方形填充,要求相邻的方块字母不能相同,求字典序(将所有行拼接起来)最小的方案. 初步解法:一开始没怎么想,以为策略是每次填充一个尽量大的正方形.但 ...
- Top Android App使用的组件 3
8684公交 AdChina:com.adchina:易传媒广告平台 AdsMogo:com.adsmogo:芒果移动广告平台 大姨吗 AChartEngine:org.achartengine:An ...