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

贪心全场!!!!

A题:

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cmath>
using namespace std;
typedef struct node
{
double x1;
double x2; }point;
point position[];
bool cmp(point a,point b)
{
return a.x1<b.x1;
}
int main()
{
int n,d;
int i;
int tempx,tempy;
int ans;
double temp;
int flage;
int CASE=; while(~scanf("%d%d",&n,&d))
{
if(n==&&d==)break; flage=;
for(i=;i<=n;i++)
{
scanf("%d %d",&tempx,&tempy);
if(tempy>d){ flage=;}//此处不可以加break
else if(flage==)
{
position[i].x1=tempx-sqrt(double(d*d-tempy*tempy));
position[i].x2=tempx+sqrt(double(d*d-tempy*tempy));
}
} printf("Case %d: ",CASE++); if(!flage)
{
sort(position+,position++n,cmp);
temp=position[].x2;
ans=;
for(i=;i<=n;i++)
{
if(position[i].x1-temp>10e-)
{
ans++;
temp=position[i].x2; }
else
{
temp=temp<position[i].x2?temp:position[i].x2;
}
}
printf("%d\n",ans);
}
if(flage)
printf("-1\n");
}
return ;
} //网上找的代码.....能AC,0MS。

我自己写的。。。。真心不知道哪错了,一直WA。

 #include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
class A
{
public:
int a;
int b;
}z[];
int dis(int y,int d)
{
return sqrt(d*d-y*y);
}
int main()
{
int n,i,x[],y[],zhong,sum=,j,k,t,d,q;
while(~scanf("%d%d",&n,&d))
{
if(n==&&d==)
break;
sum++;
zhong =;
for(i=;i<n;i++)
{
scanf("%d%d",&x[i],&y[i]);
if(y[i]>d)
zhong=;
}
if(zhong==)
cout<<"Case "<<sum<<": "<<"-1"<<endl;
else if(zhong ==)
{
if(n==)
cout<<"Case "<<sum<<": "<<""<<endl;
else
{
for(i=;i<n;i++)
{
t=dis(y[i],d);
z[i].a=x[i]-t;
z[i].b=x[i]+t;
}
for(i=;i<n-;i++)
for(j=i+;j<n;j++)
{
if(z[i].a>z[j].a)
{
t=z[i].a;
z[i].a=z[j].a;
z[j].a=t;
t=z[i].b;
z[i].b=z[j].b;
z[j].b=t;
}
}
k=;
q=z[].b;
for(j=;j<n;j++)
{
if(q<z[j].a)
{
k++;
q=z[j].b;
}
else
q=q<z[j].b?q:z[j].b;
} cout<<"Case "<<sum<<": "<<k<<endl;
}
}
}
return ;
} //求大神指点......

知道哪错了。。。。精度问题!!!!!!雷达可以不在整数坐标上!!!!!!!

接下来是改过的,能AC的代码:47MS

#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
class A
{
public:
double a; //double !!!
double b;
}z[];
double dis(double y,double d) //注意用double !!!!!
{
return sqrt(d*d-y*y);
}
int main()
{
int n,i,zhong,sum=,j,k;
double d,x[],y[],q,t;
while(~scanf("%d%lf",&n,&d))
{
if(n==&&d==)
break;
sum++;
zhong =;
for(i=;i<n;i++)
{
scanf("%lf%lf",&x[i],&y[i]);
if(y[i]>d)
zhong=;
}
if(zhong==)
cout<<"Case "<<sum<<": "<<"-1"<<endl;
else if(zhong ==)
{
if(n==)
cout<<"Case "<<sum<<": "<<""<<endl;
else
{
for(i=;i<n;i++)
{
t=dis(y[i],d);
z[i].a=x[i]-t;
z[i].b=x[i]+t;
}
for(i=;i<n-;i++)
for(j=i+;j<n;j++)
{
if(z[i].a>z[j].a)
{
t=z[i].a;
z[i].a=z[j].a;
z[j].a=t;
t=z[i].b;
z[i].b=z[j].b;
z[j].b=t;
}
}
k=;
q=z[].b;
for(j=;j<n;j++)
{
if(q<z[j].a)
{
k++;
q=z[j].b;
}
else
q=q<z[j].b?q:z[j].b;
} cout<<"Case "<<sum<<": "<<k<<endl;
}
}
}
return ;
}

再就是坑爹的B题,大意是,给出指数和最后的值,求底数.

颤抖吧!!!!!16MS

#include<iostream>
#include<math.h>
using namespace std;
int main()
{
double s,n;
while(cin>>n>>s)
cout<<pow(s,/n)<<endl;;
return ;
}

深深的觉得Orz......
C题理解好题意即可。

以下题意解释来自:優YoU http://user.qzone.qq.com/289065406/blog/1299234147

题意比较难懂,其实只要读懂题意,就很简单了。

大意是一个公司在12个月中,或固定盈余s,或固定亏损d.

但记不得哪些月盈余,哪些月亏损,只能记得连续5个月的代数和总是亏损(<0为亏损),而一年中只有8个连续的5个月,分别为1~5,2~6,…,8~12

问全年是否可能盈利?若可能,输出可能最大盈利金额,否则输出“Deficit".

根据经验,贪心选择往往都在极端处(临界点)选择。(其实这题不用贪心,单纯枚举也可以AC,因为不同情况实在太少呐。。。。

不难证明,每连续5个月中,在保证这5个月经营之和为亏损的情况下,亏损的月数肯定应尽量往后选,盈利的月数应尽量往前选。证明省略。

先处理处理完1~5月后,剩下的月份可以根据“连续5个月经营之和为亏损”这个条件进行确定亏损还是盈利。

本题的贪心选择每次仅仅选取其中一种情况(1~5月),因为之后月份无需再选择,所以每次总共只做了一次贪心选择。

实际上;只要讨论5种情况即可;(任一月固定盈余s,或固定亏损d).

SSSSDSSSSDSS   4s<d       保证“连续5个月必亏损”,每连续5个月种至少1个月D,

保证可能有全年最大盈余,每连续5个月中至多4个月S

SSSDDSSSDDSS   3s<2d      保证“连续5个月必亏损”,每连续5个月种至少2个月D,

保证可能有全年最大盈余,每连续5个月中至多3个月S

SSDDDSSDDDSS   2s<3d      保证“连续5个月必亏损”,每连续5个月种至少3个月D,

保证可能有全年最大盈余,每连续5个月中至多2个月S

SDDDDSDDDDSD   s<4d       保证“连续5个月必亏损”,每连续5个月种至少4个月D,

保证可能有全年最大盈余,每连续5个月中至多1个月S

DDDDDDDDDDDD   s>=4d      保证“连续5个月必亏损”,每连续5个月种至少5个月D,

每月亏损,此情况全年必亏损

要注意的是,前4种情况都仅仅是“可能有全年的盈余”,而不是“一定有全年的盈余”。

但是若果一旦有盈余,必定是最大盈余

把5种情况可以归纳为关于s的判定条件:

0 <= s <1/4d           每连续5个月种至少1个月D

1/4d <= s < 2/3d          每连续5个月种至少2个月D

2/3d <= s < 3/2d          每连续5个月种至少3个月D

3/2d <= s < 4d           每连续5个月种至少4个月D

4d <= s                全年各月必亏损

代码:

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int sum;
double s,d;
while(~scanf("%lf%lf",&s,&d))
{
sum=;
if(s>=&&s*<d)
sum=*s-d*;
else if(s*>=d&&s*<d*)
sum=*s-*d;
else if(s*>=d*&&s*<d*)
sum=*s-*d;
else if(s*>=*d&&s<*d)
sum=*s-*d;
if(s>=*d || sum<)
cout<<"Deficit"<<endl;
else
cout<<sum<<endl;
}
return ;
}

D题:    来自一学姐,感觉不错~

 #include<stdio.h>
#include<algorithm>
#include <iostream>
using namespace std;
const int maxn=+;
struct Line
{
int s;
int t;
}line[maxn],temp[maxn];
bool cmp(Line a,Line b)
{
return a.s<b.s||(a.s==b.s&&a.t>b.t);
}
int main()
{
int m,k,i,j,ans;
int n,cnt,l,r;
scanf("%d",&m);
cnt=;
for(;;)
{
scanf("%d%d",&l,&r);
if(l==&&r==)
break;
line[++cnt].s=l;
line[cnt].t=r; } sort(line+,line+cnt+,cmp);
j=;
for(i=;i<=cnt;i++)//将互不覆盖的线段存起来
if(line[i].s>line[j].s&&line[i].t>line[j].t)
line[++j]=line[i];
n=j;
ans=;
line[n+].s=m+;
line[n+].t=m+;
k=;//第一个临界
for(i=;i<=n;i++)
if(line[i+].s>k&&line[i].s<=k)
{
k=line[i].t;
temp[++ans]=line[i];
if(line[i].t>=m)
{
printf("%d\n",ans);
for(j=;j<=ans;j++)
printf("%d %d\n",temp[j].s,temp[j].t);
return ;
}
}
printf("No solution\n");
return ;
}

E题:  先是要读懂题:

以下解释来自:http://blog.sina.com.cn/s/blog_4dc813b20100t133.html

将整个题归结为一棵树,求最多能给多少个节点染色,根节点不染色,且染色规则如下:
(1)每一个节点至多只有一个儿子被染色
(2)如果某个节点被染色,那么它的所有儿子都不能染色。

再就是代码,不过要先去看看vector(向量容器):http://s.acmore.net/show_article/show/41

 #include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
#define N 500001
struct node{
int depth;
int i;
}order[N];
int parent[N];
int n;
bool mark[N];
vector<int> result;//vector(向量容器) 网站:http://s.acmore.net/show_article/show/41
bool cmp(const node a,const node b)
{
return a.depth>b.depth;
}
int main()
{
int i;
order[].depth=;
order[].i=;
while(cin>>n)
{
for(i=;i<=n;i++)
{
cin>>parent[i];
order[i].depth=order[parent[i]].depth+;
order[i].i=i;
}
sort(order+,order+n+,cmp);
result.clear();
memset(mark,,sizeof(mark));
for(i=;i<=n;i++){
if(!mark[order[i].i]&&!mark[parent[order[i].i]])
{
result.push_back(order[i].i); //元素扩展
mark[order[i].i]=;
mark[parent[order[i].i]]=;
}
}
cout<<result.size()*<<endl;
sort(result.begin(),result.end());
cout<<result[];
for(i=;i<result.size();i++){
cout<<" "<<result[i];
}
cout<<endl;
}
return ;
}

F题:
死了N遍:为我默哀吧。。。。还是不知道哪错了......正解参照:http://blog.csdn.net/cfreezhan/article/details/8007554(来自学姐~~~)

我的代码:
 #include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
class diqu
{
public:
int bian;
int shu;
int leve;
}d[];
class student
{
public:
int bian;
int le;
int w;
int di;
}s[];
bool cmp(diqu a,diqu b)
{
return a.leve>b.leve;
}
bool cnp(student a,student b)
{
return a.w>b.w;
}
bool cn(student a,student b)
{
return a.bian<b.bian;
}
int main()
{
int n,i,j,num=;
scanf("%d",&n);
for(i=;i<=n;i++)
{
scanf("%d",&d[i].shu);
d[i].bian=i;
num=num+d[i].shu;
}
for(i=;i<=n;i++)
scanf("%d",&d[i].leve);
for(i=;i<=num;i++)
{
s[i].di=-;
s[i].bian=i;
scanf("%d",&s[i].le);
}
for(i=;i<=num;i++)
scanf("%d",&s[i].w);
sort(d+,d+n+,cmp);
sort(s+,s+num+,cnp);
for(i=;i<=num;i++)
for(j=;j<=n;j++)
if(s[i].le>d[j].leve&&d[j].shu)
{
s[i].di=d[j].bian;
d[j].shu--;
break;
}
i=;
for(j=;j<=num;j++)
{
if(s[j].di!=-)
continue;
while(d[i].shu==)
i++;
s[j].di=d[i].bian;
d[i].shu--;
}
sort(s+,s+num+,cn);
for(i=;i<=num-;i++)
printf("%d ",s[i].di);
printf("%d\n",s[num].di);
return ;
}

我擦!!!!最后居然有空格!!!!

最后两句改成:

for(i=1;i<=num;i++)
        printf("%d ",s[i].di);

第二次训练 密码acmore的更多相关文章

  1. 第三次训练 密码acmore

    网站:CSUST7月23号 A题:大意是:一个N多边形,用红,绿,蓝三色给定点上色,要求划分成顶点颜色不同的三角形. 解析: 这道题是黑书上分治法的例题,还是比较巧的. 首先很容易发现当某种颜色的点只 ...

  2. 第一次训练 密码:acmore

    #include <cstdio> #include <cstring> #define M 100010 #define INF 0x7FFFFFFF #define Min ...

  3. 第二周训练 | 搜索技术 4.3 BFS

    A - Red and Black There is a rectangular room, covered with square tiles. Each tile is colored eithe ...

  4. 2019.04.04 第二次训练 【ACM International Collegiate Programming Contest, JUST Collegiate Programming Contest (2018)】

    题目链接:https://codeforces.com/gym/101853 A: ✅ B: (二分图匹配) https://blog.csdn.net/qq_41997978/article/det ...

  5. [置顶] 2013_CSUST暑假训练总结

    2013-7-19 shu 新生训练赛:母函数[转换成了背包做的] shuacm 题目:http://acm.hdu.edu.cn/diy/contest_show.php?cid=20083总结:h ...

  6. WampServer下修改和重置MySQL密码(转)

    转自:www.2cto.com/database/201504/387589.html WampServer安装后密码是空的, 修改一般有两种方式: 一是通过phpMyAdmin直接修改: 二是使用W ...

  7. WampServer修改MySQL密码

    WampServer安装后密码是空的,需要设置一下 一般有两种方式: 一是通过phpMyAdmin直接修改: 二是使用WAMP的MySql控制台修改. 第一种: ①在phpMyAdmin界面中点击[用 ...

  8. ajax修改密码

    <div>用户名:<input type="text" id="uid" /><span id="tt" st ...

  9. MySQL 数据库修改登录密码

    MySQL 数据库修改登录密码.. -------- mysql修改密码 默认的密码为空:mysql -u root -p第一次更改密码:mysqladmin -uroot -p password x ...

随机推荐

  1. @SpringBootApplication注解

    @SpringBootApplication注解表明了SpringBoot的核心功能,即自动配置. @SpringBootApplication(主配置类): @SpringBootConfigura ...

  2. bzoj4737: 组合数问题

    终于过了肝了一天啊,怎么我最近都在做细节码农题啊 (这种水平NOIP凉凉??) luacs大家都可以想到用吧,一开始我的思路是把所有在p以内的%p==0的组合数预处理出来,那C(n/p,m/p)任取, ...

  3. Building a Space Station(bfs)

    http://poj.org/problem?id=2031 题意:给出n个球的圆心坐标x,y,z, 半径r,若任意两球不相交,则在两球间建桥.问需建桥的最短距离是多少. 思路:建图,以两球间相差的距 ...

  4. SQLServer2008 关于Having

    转自百度百科 与where 相比 HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT 语句交互的方式类似. WHERE 子句搜索条件在进行分组操作之前应用: ...

  5. Android HTTP下载文件并保存到本地或SD卡

    想把文件保存到SD卡中,一定要知道SD卡的路径,获取SD卡路径: Environment.getExternalStorageDirectory() 另外,在保存之前要判断SD卡是否已经安装好,并且可 ...

  6. Android中ImageView的属性

    资源使用 Android 中支持三种格式的位图文件:.png(首选), .jpg(可接受),.gif(不建议) 为什么首推 PNG 呢? 官网的描述如下: 注:在构建过程中,可通过 aapt 工具自动 ...

  7. Java常见错误整理(一)

    1.配置完Java环境变量之后,仍然不能使用java命令. 解决方法: 如果是Windows10系统出现此问题,是因为个别Windows10系统不识别“JAVA_HOME”环境变量,将path中所有的 ...

  8. Android 4.0 Launcher2源码分析——主布局文件(转)

    本文来自http://blog.csdn.net/chenshaoyang0011 Android系统的一大特色是它拥有的桌面通知系统,不同于IOS的桌面管理,Android有一个桌面系统用于管理和展 ...

  9. DeltaFish 校园物资共享平台 第五次小组会议

    软工第五次小组会议 记录人:娄雨禛 会议地点:三教讨论区 会议时间:9:00-10:00 与会人员:软工小组成员 一.前端会议提要 前端分为“2+2”组合进行开发. 底层设计:齐天扬,刘鼎乾 界面美化 ...

  10. ★Java语法(六)——————————分支语句

    1. if 语句   格式用法: if(布尔表达式) { 语句: } 2. if……else  语句 格式用法: if(表达式) { 语句1: } else { 语句2: } 3.if……else i ...