5.22 noip模拟赛
本来我是不想写的,无奈不会写。蒟蒻 考场就是想不出来 今天得到了100分额外水过了100分我是真的失败。还有一个根本不会check 感觉自己非常之菜。
这道题是这样的 还行吧比较有意思 首先确立一个真命题对于一个入度为2的点其一定是属于链上的一点的。因为 考虑其不在链上的情况如果连接的是不管连接的一定是多度数点>=3和其他的点但其末尾一定是一个度数等于1的点我们将其提上来把当前的点插到直径上即可。为什么不考虑单度数点呢?因为树的直径一定只有两个单度数点我们考虑也没用。
再确定一个假命题 当一棵树的度数一定是这颗树也确定,假的!同分异构体和等效氢的方法将其排除!那么此时对答案的影响就只有多度数点了考虑对答案的贡献是 任意一个多度数点和双度数点一样都可以连在树的直径之上这个我们随便想都是可行的。于是有解法了 对于多度数点删一些边即可当度数>=3时删掉n-2条边然后就没了。
//#include<bits/stdc++.h>
#include<iostream>
#include<queue>
#include<iomanip>
#include<cctype>
#include<cstdio>
#include<deque>
#include<utility>
#include<cmath>
#include<ctime>
#include<cstring>
#include<string>
#include<cstdlib>
#include<vector>
#include<algorithm>
#include<stack>
#include<map>
#include<set>
#include<bitset>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)>(y)?(y):(x))
#define INF 1000000000
#define ll long long
#define db double
using namespace std;
char buf[<<],*fs,*ft;
inline char getc()
{
return (fs==ft&&(ft=(fs=buf)+fread(buf,,<<,stdin),fs==ft))?:*fs++;
}
inline int read()
{
int x=,f=;char ch=getc();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getc();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getc();}
return x*f;
}
inline void put(int x)
{
x<?putchar('-'),x=-x:;
int num=;char ch[];
while(x)ch[++num]=x%+'',x/=;
num==?putchar(''):;
while(num)putchar(ch[num--]);
putchar('\n');return;
}
const int MAXN=;
int n,flag,ans,cnt,flag1;
int a[MAXN];
int main()
{
freopen("1.in","r",stdin);
//freopen("tree.in","r",stdin);
//freopen("tree.out","w",stdout);
n=read();ans=n-;
for(int i=;i<=n;++i)
{
a[i]=read();
if(a[i]>=)ans-=a[i]-;
if(a[i]==n-&&n>)flag1=;
if(a[i]<=)flag=;
cnt+=a[i];
}
if(cnt!=((n-)<<))flag=;
if(flag==){put(-);return ;}
if(flag1==){put();return ;}
put(ans);
return ;
}
看完题目显然是一个二分 但是我不会check 丢人 check是 找到ad的值域和bc的值域观察是否有交集即可。
我没想到我不知道为什么我会没想到 这我知道了以后感觉很显然就这样判断一下就是100分诶。
//#include<bits/stdc++.h>
#include<iostream>
#include<queue>
#include<iomanip>
#include<cctype>
#include<cstdio>
#include<deque>
#include<utility>
#include<cmath>
#include<ctime>
#include<cstring>
#include<string>
#include<cstdlib>
#include<vector>
#include<algorithm>
#include<stack>
#include<map>
#include<set>
#include<bitset>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)>(y)?(y):(x))
#define INF 1000000000
#define ll long long
#define db double
using namespace std;
char buf[<<],*fs,*ft;
inline char getc()
{
return (fs==ft&&(ft=(fs=buf)+fread(buf,,<<,stdin),fs==ft))?:*fs++;
}
inline int read()
{
int x=,f=;char ch=getc();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getc();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getc();}
return x*f;
}
inline void put(int x)
{
x<?putchar('-'),x=-x:;
int num=;char ch[];
while(x)ch[++num]=x%+'',x/=;
num==?putchar(''):;
while(num)putchar(ch[num--]);
putchar('\n');return;
}
int a,b,c,d;
inline int check(db x)
{
db maxx,maxx1,minn,minn1;
maxx=maxx1=-(ll)INF*(ll)INF*1.0;
minn=minn1=(ll)INF*(ll)INF*1.0;
db a1=a+x,a2=a-x;
db b1=b+x,b2=b-x;
db c1=c+x,c2=c-x;
db d1=d+x,d2=d-x;
maxx=max(maxx,a1*d1);
maxx=max(maxx,a1*d2);
maxx=max(maxx,a2*d1);
maxx=max(maxx,a2*d2);
minn=min(minn,a1*d1);
minn=min(minn,a1*d2);
minn=min(minn,a2*d1);
minn=min(minn,a2*d2);
maxx1=max(maxx1,c1*b1);
maxx1=max(maxx1,c1*b2);
maxx1=max(maxx1,c2*b1);
maxx1=max(maxx1,c2*b2);
minn1=min(minn1,c1*b1);
minn1=min(minn1,c1*b2);
minn1=min(minn1,c2*b1);
minn1=min(minn1,c2*b2);
if(minn<=maxx1&&minn>=minn1)return ;
if(maxx<=maxx1&&maxx>=minn1)return ;
return ;
}
int main()
{
freopen("1.in","r",stdin);
//freopen("matrix.in","r",stdin);
//freopen("matrix.out","w",stdout);
a=read();b=read();c=read();d=read();
//if(a==1&&b==2&&c==3&&d==4){puts("0.2000000000");return 0;}
db l=,r=1000000000.0;
while(l+0.0000001<r)
{
db mid=(l+r)/;
if(check(mid))r=mid;
else l=mid;
}
if(check(l))printf("%.12lf",l);
else printf("%.12lf",r);
return ;
}
这个简单一个矩阵快速幂解决了。。
//#include<bits/stdc++.h>
#include<iostream>
#include<queue>
#include<iomanip>
#include<cctype>
#include<cstdio>
#include<deque>
#include<utility>
#include<cmath>
#include<ctime>
#include<cstring>
#include<string>
#include<cstdlib>
#include<vector>
#include<algorithm>
#include<stack>
#include<map>
#include<set>
#include<bitset>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)>(y)?(y):(x))
#define INF 1000000000
#define ll long long
#define db double
using namespace std;
char buf[<<],*fs,*ft;
inline char getc()
{
return (fs==ft&&(ft=(fs=buf)+fread(buf,,<<,stdin),fs==ft))?:*fs++;
}
inline ll read()
{
ll x=,f=;char ch=getc();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getc();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getc();}
return x*f;
}
inline void put(ll x)
{
x<?putchar('-'),x=-x:;
ll num=;char ch[];
while(x)ch[++num]=x%+'',x/=;
num==?putchar(''):;
while(num)putchar(ch[num--]);
putchar('\n');return;
}
const ll MAXN=;
ll n,m;
ll f[MAXN];
ll w=;
struct wy
{
ll A[MAXN][MAXN];
wy(){memset(A,,sizeof(A));}
wy friend operator*(wy a,wy b)
{
wy tmp;
for(ll i=;i<=w;++i)
for(ll j=;j<=w;++j)
for(ll k=;k<=w;++k)
tmp.A[i][j]=(tmp.A[i][j]+a.A[i][k]*b.A[j][k]%m)%m;
return tmp;
}
}c;
inline void fast(ll x)
{
while(x)
{
if(x&)
{
ll tmp1=(f[]*c.A[][]%m+f[]*c.A[][]%m)%m;
ll tmp2=(f[]*c.A[][]%m+f[]*c.A[][]%m)%m;
f[]=tmp1;f[]=tmp2;
}
x=x>>;
c=c*c;
}
}
int main()
{
//freopen("1.in","r",stdin);
freopen("fibonacci.in","r",stdin);
freopen("fibonacci.out","w",stdout);
n=read();m=read();
if(n==||n==){put(%m);return ;}
c.A[][]=;c.A[][]=;
c.A[][]=;c.A[][]=;
f[]=;f[]=;
fast(n);
put(f[]%m);
return ;
}
今天发挥的不太好没有充分利用知识至少第二题的二分我应该是可以想出来的。
5.22 noip模拟赛的更多相关文章
- 2018.9.22 NOIP模拟赛
*注意:这套题目应版权方要求,不得公示题面. 从这里开始 Problem A 妹子 Problem B 旅程 Problem C 老大 因为业务水平下滑太严重,去和高一考NOIP模拟,sad... P ...
- 18.9.22 noip模拟赛
此题为找规律.期望100 实际100 #include<cstdio> #include<cstring> #include<iostream> #include& ...
- 【2019.7.22 NOIP模拟赛 T1】麦克斯韦妖(demon)(质因数分解+DP)
暴力\(DP\) 先考虑暴力\(DP\)该怎么写. 因为每个序列之后是否能加上新的节点只与其结尾有关,因此我们设\(f_i\)为以\(i\)为结尾的最长序列长度. 每次枚举一个前置状态,判断是否合法之 ...
- 10.16 NOIP模拟赛
目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...
- 【HHHOJ】NOIP模拟赛 捌 解题报告
点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
随机推荐
- 火车运输(最大生成树+lca) 洛谷P1967
货车运输 题目描述 \(A\) 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\) ,城市之间有 \(m\) 条双向道路.每一条道路对车辆都有重量限制,简称限重. 现在有 \(q\) 辆货车 ...
- HDU 5969 最大的位或 (思维,贪心)
HDU 5969 最大的位或 题目大意 B君和G君聊天的时候想到了如下的问题. 给定自然数\(l\)和\(r\) ,选取\(2\)个整数\(x,y\)满足\(l <= x <= y < ...
- 洛谷 P4408 [NOI2003]逃学的小孩
题目传送门 题目描述 Chris家的电话铃响起了,里面传出了Chris的老师焦急的声音:“喂,是Chris的家长吗?你们的孩子又没来上课,不想参加考试了吗?”一听说要考试,Chris的父母就心急如焚, ...
- Python-日期格式化
1.基本方法 获取当前日期:time.time() 获取元组形式的时间戳:time.local(time.time()) 格式化日期的函数(基于元组的形式进行格式化): (1)time.asctime ...
- 学习记录 | 文件收集-Php
宝贝推荐 推荐新手使用phpStudy这个建站,太方便了 实验初衷 大学什么事情都多,所以什么事情都要偷一下懒,大学总有收不完的青年大学习,我就想能不能来个自助收集然后捣鼓,捣鼓就有了简单的收集程序. ...
- about 蛤蛤
蛤蛤属于蛤蛤门(haha),蛤蛤纲(haha),蛤蛤亚纲(haha),蛤蛤目(haha),蛤蛤总科(haha),蛤蛤科(haha).
- gitlab-ci部署实现持续集成(centos7)
一.gitlab安装 1. 环境准备 // selinux和 firewall 关闭 $ setenforce 0 $ sed -i "/^SELINUX/s/enforcing/disab ...
- mysql两种重要的引擎
其中MyISAM:不支持事物,表锁 .frm : 表结构定义文件 .MYD: 表数据 .MYI:索引文件 InnoDB:支持事物,行锁 .frm : 表结构定义文件 .ibd:表空间(数据和索引)
- element-ui的upload组件的clearFiles方法的调用
element-ui使用中碰到的问题 <template> <div> <el-button @click="clearFiles">重新上传& ...
- flask 源码专题(十):flash源码研究
flash源码 def flash(message, category="message"): flashes = session.get("_flashes" ...