第二次训练 密码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(来自学姐~~~)
6LNYD~TJNR90W6Q8.jpg)
#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 ...
随机推荐
- 《Java编程思想》笔记
第十章 (1)当生成一个内部类的对象时.此对象 与制造他的外围对象之间就有了一种联系,所以它能訪问其外围对象的全部成员,而不须要不论什么特殊条件. 此外,内部类还拥有其它外围类的全部元素的訪问权. ( ...
- 包含utf8字符的 pickle 转 json的大坑处理过程
背景:希望将pickle转换为json,由于pickle里有utf8的字符,因此转换失败. 转换代码如下: ''' Convert a pkl file into json file ''' impo ...
- diff比较两个文件的差异
1.diff -ruN a.txt b.txt>patch.txt比较第二个文件与第一个文件相比的变化,并将变化添加到patch.txt文件中,-表示删除的行,+表示添加的行 2.下面的,“&l ...
- Oracle 12.2.0.1 RAC for rhel 7.X 数据库安装(节点1执行root.sh失败)
说明: 最开始是用的rehat7.2安装12.2.0.1,后面安装GI节点一执行root.sh脚本失败,排查原因,最开始以为是操作系统的问题,换成rehat7.6,同样的出现问题,经过一番折腾,后面通 ...
- JNI学习积累之一 ---- 常用函数大全
主要资料来源: 百度文库的<JNI常用函数> . 同时对其加以了补充 . 要素 :1. 该函数大全是基于C语言方式的,对于C++方式可以直接转换 ,例如,对于生成一个jstring类型的 ...
- android view、viewgroup 事件响应拦截处理机制
文章中会用到部分网络资源,首先将原作者的链接附上. 但是还是会附上数量较大的关于此部分内容的自己的思考. ----------------------------------------------- ...
- myeclipse2014 破解步骤
1.打开破解文件夹Myeclipse 2014 patch,运行run.bat文件 2.在破解界面中,usercode随便输入, systemid 在右边的SystemId按钮处,点击. 将自动生成一 ...
- 5.13Mysql数据库Database
数据库的基本概念 1.什么是数据库: 用于存储和管理数据的仓库. 2.数据库的特点: 1.持久化存储数据的.其实数据库就是一个文件系统. 2.方便存储和管理数据 3.使用了统一的方式操作数据库---s ...
- Oracle 动态sql小例子
错误写法: create or replace procedure testproce20130228issqlstr varchar2(8000);date1 varchar2(10);begins ...
- font使用
font连写属性 font-style font-variant font-weight font-size/line-height font-family font-size与font-fam ...