第二次训练 密码acmore
网址: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的更多相关文章
- 第三次训练 密码acmore
网站:CSUST7月23号 A题:大意是:一个N多边形,用红,绿,蓝三色给定点上色,要求划分成顶点颜色不同的三角形. 解析: 这道题是黑书上分治法的例题,还是比较巧的. 首先很容易发现当某种颜色的点只 ...
- 第一次训练 密码:acmore
#include <cstdio> #include <cstring> #define M 100010 #define INF 0x7FFFFFFF #define Min ...
- 第二周训练 | 搜索技术 4.3 BFS
A - Red and Black There is a rectangular room, covered with square tiles. Each tile is colored eithe ...
- 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 ...
- [置顶] 2013_CSUST暑假训练总结
2013-7-19 shu 新生训练赛:母函数[转换成了背包做的] shuacm 题目:http://acm.hdu.edu.cn/diy/contest_show.php?cid=20083总结:h ...
- WampServer下修改和重置MySQL密码(转)
转自:www.2cto.com/database/201504/387589.html WampServer安装后密码是空的, 修改一般有两种方式: 一是通过phpMyAdmin直接修改: 二是使用W ...
- WampServer修改MySQL密码
WampServer安装后密码是空的,需要设置一下 一般有两种方式: 一是通过phpMyAdmin直接修改: 二是使用WAMP的MySql控制台修改. 第一种: ①在phpMyAdmin界面中点击[用 ...
- ajax修改密码
<div>用户名:<input type="text" id="uid" /><span id="tt" st ...
- MySQL 数据库修改登录密码
MySQL 数据库修改登录密码.. -------- mysql修改密码 默认的密码为空:mysql -u root -p第一次更改密码:mysqladmin -uroot -p password x ...
随机推荐
- luogu1522 牛的旅行
题目大意 每个牧场里的某些坐标位置有牧区,牧区间有一个个路径(长度为位置间的直线距离).一个连通块内两个节点间的最短路径长度最大值为它的直径.请编程找出一条连接两个不同牧场的路径,使得连上这条路径后, ...
- 5-7 第五天 微信 JS-SDK-简介
微信的SDK显然呢并不是在这个公众号里面直接使用的,而是在网页里面使用的.什么样的网页呢?就是微信内置的浏览器.你从朋友圈.从好友消息.从群消息,确定是从公众号的回复里面打开一个链接. 便会启动一个浏 ...
- SpringMVC之DispatcherServlet详解
SpringMVC是一种基于请求启动的WEB框架,并且使用了前端控制器的设计模式,所有满足[WEB-INF/web.xml]文件中的[url-pattern]的匹配条件的请求,这些满足的请求都会交给这 ...
- 关于每次取PC的值为PC+4的问题
关于ARM的书上常说由于流水线特性,在指令执行期间读取程序计数器时,读出的值需要为当前指令+4 一开始总是不理解,今天被一位大神一语道破其中精髓.... 程序计数器(PC)总是指向“正在取指”的指令 ...
- 运行Django项目指定IP和端口
默认IP和端口 python manage.py runserver 指定端口: python manage.py runserver 192.168.12.12:8080 此时会报错,我们需要修改配 ...
- Coursera公开课-Machine_learing:编程作业6
Support Vector Machines I have some issues to state. First, there were some bugs in original code wh ...
- SQLServer2008 使用sql语句访问excel数据
exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Quer ...
- wamp中的mysql服务与原来安装的mysql服务冲突的解决办法
如果原来机器上已经安装了mysql,在安装wamp之后,打开wamp上的mysql时会打不开,或者会将原来安装的mysql服务关闭.原因是两个mysql共用了3306端口,解决办法是更改其中的一个端口 ...
- 关于基础的Set 和Get
先附上一篇文章,讲的很清楚 在Core中,我们要是先这样设置了.在我们对这个上下文做查询工作的时候,例如: var head = _OMSECDatabase.OmsEcorderHead.Where ...
- SQL中EXTRACT() 函数
EXTRACT()("提取"的意思) 函数用于返回日期/时间的单独部分,比如年.月.日.小时.分钟等等. 就是返回出来具体的年,月,日 2008-12-29 16:25:46.63 ...