去年的比赛了,然而今天才改好。

  总体难度适中,有大佬AK。

  主要是自己SB第二题没想出来,然后又是可怜的100来分。

  T1 一道二分+数学的题目。

  我们可以二分叫的次数,然后用公式(等差数列,公差都是zi)算一个最大的可行的数目。

  最后把多余的加上去即可。

  注意当xi,yi都等于0的情况。

  CODE

#include<cstdio>
#include<cmath>
using namespace std;
typedef long long LL;
LL ans,n,t,t_2,t_s,x,y,z,res,l,r,mid,temp;
inline void read(LL &x)
{
x=; char ch=getchar();
while (ch<''||ch>'') ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
}
int main()
{
freopen("brute.in","r",stdin); freopen("brute.out","w",stdout);
read(n); read(t); t_2=t*;
while (n--)
{
read(x); read(y); read(z);
l=; if (x+y) r=t/(x+y); else r=(LL)sqrt(t_2/z)+;
temp=*x+*y;
while (l<=r)
{
mid=l+r>>;
if (mid*(temp+mid*z-z)<=t_2) res=mid,l=mid+; else r=mid-;
}
ans+=res*(*y+z*res-z)/;
t_s=t-res*(temp+res*z-z)/-x;
if (t_s>) ans+=t_s;
}
printf("%lld",ans);
return ;
}

  T2 标算用了神奇的。。。数据结构来打。

  然而当时A了这道题的都是用超级简单的方法水过的。

  现在只讨论玄学算法(即超级水过的算法)。

  由于题目不要求分别输出每一次的值,所以我们只需要先把全部操作做完,最后1次DFS遍历一下每个点一共访问了几次。

  第1次操作ans+1; 第2次 ans+2; 第3次 ans+3;  第n次 ans+n;

  然后又是玄学的等差数列求和即可。ans+=(n+1)*n/2;

  CODE

#include<cstdio>
#include<vector>
using namespace std;
typedef long long LL;
const int N=;
vector <LL> a[N];
LL n,m,i,x,ans,t[N],f[N];
struct io
{
char op[ << ] , * s;
io()
{
freopen( "chiye.in" , "r" , stdin );
freopen( "chiye.out" , "w" , stdout );
fread( s = op , , << , stdin );
}
inline void read(LL &u)
{
u = ;
while( * s < ) s++;
while( * s > )
u = u * + * s++ - ;
}
} ip;
#define read ip.read
inline void dfs(int k)
{
f[k]+=t[k];
for (int i=;i<a[k].size();++i)
f[k]+=t[a[k][i]],f[a[k][i]]+=t[k],dfs(a[k][i]);
}
int main()
{
read(n); read(m);
for (i=;i<=n;++i)
{
read(x);
a[x].push_back(i);
}
while (m--)
{
read(x);
t[x]++;
}
dfs();
for (i=;i<=n;++i)
ans+=f[i]*(f[i]+)/;
printf("%lld",ans);
return ;
}

  (fread模板是免费提供的)

  T3 Tarjan缩点+树形DP

  就这道题改了很久,到现在还是因为不会Tarjan缩点(打了DFS)TLE了4个点。

  首先前30分想怎么暴力怎么暴力。

  然后发现因为这个图只有简单环,所以左右的点可以分成2种:圆点和方点。

  简单地说,圆点就是原来的图中不包括在任何一个环中的点;方点就是把一个简单环缩成的一个点。如下图:

变成

  然后我们发现一个眼镜的两边都是方点,如果两个端点确定,那么这两个点可以组成的眼镜数量就是2^(两个端点之间的方点个数);

  接下来又有50——70分可以暴力DFS了。

  如果想得满分,就得考虑树形DP,设f[x]为以x为根的子树(包括x)一共有多少“一半的眼镜”(即只有一个端点的)

  然后状态转移 :

  f[x] = Σ( f[ son[x] ] );

  如果x是圆点,则f[x]不变

  如果x是方点,则f[x] = f[x] * 2 + 1(可以走两次再加上它自己)

  每次做的时候更新ans即可。具体看代码。

  CODE

#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
const int N=,mod=;
vector <int> a[N],b[N];
int n,m,f[N],num[N],pre[N],i,j,tot,x,y;
bool kinds[N],vis[N],use[N];
long long ans;
inline void read(int &x)
{
x=; char ch=getchar();
while (ch<''||ch>'') ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
}
inline void print(int k)
{
if (pre[k]) print(pre[k]);
num[k]=tot;
use[k]=;
}
inline void find(int s,int k)
{
for (int i=;i<a[k].size();++i)
if ((!vis[a[k][i]])&&(!use[a[k][i]])) pre[a[k][i]]=k,vis[a[k][i]]=,find(s,a[k][i]),vis[a[k][i]]=; else
if (a[k][i]==s&&a[k][i]!=pre[k])
{
print(k);
kinds[tot]=;
return;
}
}
inline int dp(int k)
{
vis[k]=;
for (int i=;i<b[k].size();++i)
{
int now=b[k][i];
if (vis[now]) continue;
int temp=dp(b[k][i]);
ans=(ans+f[k]*(kinds[k]?2ll:1ll)*temp)%mod;
f[k]=(f[k]+temp)%mod;
}
if (kinds[k]) ans=(ans+f[k])%mod,f[k]=(f[k]*+)%mod;
return f[k];
}
int main()
{
freopen("dark.in","r",stdin); freopen("dark.out","w",stdout);
read(n); read(m);
for (i=;i<=m;++i)
{
read(x); read(y);
a[x].push_back(y); a[y].push_back(x);
}
for (i=;i<=n;++i)
if (!use[i]) ++tot,num[i]=tot,use[i]=,kinds[tot]=,memset(pre,,sizeof(pre)),vis[i]=,find(i,i),vis[i]=;
for (i=;i<=n;++i)
for (j=;j<a[i].size();++j)
if (num[i]!=num[a[i][j]]) b[num[i]].push_back(num[a[i][j]]);
dp();
printf("%lld",ans);
return ;
}

EZ 2017 12 30 2018noip第二次膜你赛的更多相关文章

  1. EZ 2017 12 17初二初三第一次膜你赛

    以后平时练习还是写一写吧. (题目搞来搞去太烦了,直接PDF存起来) T1 水题(???),主要是数据水,正解是设一个阙值,然而根本没人打.(暴力出奇迹) CODE #include<cstdi ...

  2. 【2017.12.12】deepin安装U盘制作,支持 BIOS+UEFI,deepin_Recovery+Win PE

    U盘要求为 FAT32,MBR分区表 如果需要放 4GB 大文件,可以分两个分区,第一分区FAT32格式,放启动相关文件,第二个分区用 NTFS 格式,放其它资料. 最新 Win10 支持显示 U盘 ...

  3. 2017.12.21-JQuery

    作业:密码加强验证 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> & ...

  4. 2017.12.25 Mybatis物理分页插件PageHelper的使用(二)

    参考来自: 官方文档的说明:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md 上篇博客 ...

  5. 2015.12.29~2015.12.30真题回顾!-- HTML5学堂

    2015.12.29~2015.12.30真题回顾!-- HTML5学堂 吃饭,能够解决饥饿,提供身体运作机能.练习就像吃饭,强壮自己,提升编程技能,寻求编程技巧的最佳捷径!吃饭不能停,练习同样不能停 ...

  6. Linux下查找包含BOM头的文件和清除BOM头命令 2014-08-16 12:30:50

    Linux下查找包含BOM头的文件和清除BOM头命令 2014-08-16 12:30:50 分类: 系统运维 查找包含BOM头的文件,命令如下: 点击(此处)折叠或打开 grep -r -I -l ...

  7. zero3- JPA http://www.cnblogs.com/holbrook/archive/2012/12/30/2839842.html

    1.很好的博客:http://www.cnblogs.com/holbrook/archive/2012/12/30/2839842.html 2. 最新的搬到github : http://holb ...

  8. Gitlab一键端的安装汉化及问题解决(2017/12/14目前版本为10.2.4)

    Gitlab的安装汉化及问题解决 一.前言 Gitlab需要安装的包太TM多了,源码安装能愁死个人,一直出错,后来发现几行命令就装的真是遇到的新大陆一样... ... 装完之后感觉太简单,加了汉化补丁 ...

  9. [LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞

    [LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞 试题描述 到河北省 见斯大林 / 在月光下 你的背影 / 让我们一起跳舞吧 うそだよ~ 河北省怎么可能有 Stalin. ...

随机推荐

  1. git cherry-pick 用法

    1.当合并代码冲突特别多的时候,有时候只想提交自己分支的代码.这个时候使用cherry-pick 可以实现 1)首先使用 git log --oneline -n 找到最近自己分支的提交记录,n表示提 ...

  2. 《SQLSERVER2012实施与管理实战指南》前4章节笔记内容

    <SQLSERVER2012实施与管理实战指南>前4章节笔记内容 <SQLSERVER2012实施与管理实战指南>的前面4章是<SQLSERVER企业级平台管理实践> ...

  3. 如何在 Azure 中均衡 Windows 虚拟机负载以创建具有高可用性的应用程序

    负载均衡通过将传入请求分布到多个虚拟机来提供更高级别的可用性. 本教程介绍了 Azure 负载均衡器的不同组件,这些组件用于分发流量和提供高可用性. 你将学习如何执行以下操作: 创建 Azure 负载 ...

  4. 详解JNDI的lookup资源引用java:/comp/env

    ENC的概念:     The application component environment is referred to as the ENC, the enterprise naming c ...

  5. 纯Css实现Div高度根据自适应宽度(百分比)调整

    在如今响应式布局的要求下,很多能自动调整尺寸的元素能够做到高宽自适应,如img,通过{width:50%;height:auto;}实现图片高度跟随宽度比例调整. 然而,用的最多的标签一哥Div却不能 ...

  6. 解决VS调试Web应用无问题而部署在IIS上报500和403的问题

    [问题:报500]不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默认设置的(overrideModeDefault="Deny" [解决方案] 运行 ...

  7. springmvc 笔记一

    Springmvc 处理流程 所需的包 前端配置器 在web.xml中配置 <!-- 配置前端控制器 --> <servlet> <servlet-name>spr ...

  8. October 26th, 2017 Week 43rd Thursday

    For success, attitude is equally as important as ability. 为取得成功,态度与能力一样重要. Today I read a news about ...

  9. [BZOJ 1135][POI2009]Lyz

    [BZOJ 1135][POI2009]Lyz 题意 初始时滑冰俱乐部有 \(1\) 到 \(n\) 号的溜冰鞋各 \(k\) 双.已知 \(x\) 号脚的人可以穿 \(x\) 到 \(x+d\) 的 ...

  10. 用JS制作《飞机大作战》游戏_第4讲(创建敌方飞机、敌方飞机发射子弹、玩家子弹击中敌方小飞机,小飞机死亡)-陈远波

    一.创建敌方飞机 1.思考创建思路: 创建敌方飞机思路与创建玩家飞机思路一样: (1)思考敌方飞机具备什么属性: 敌方飞机的图片.坐标.飞行速度.状态(是否被击中) 设置小飞机被击中时消失时间.飞机可 ...