T1 rob

环形消灭虫子

先想出了一个n^2暴力

然后我们想到 如果从两个连续的点求解 则会出现仅有的两种结果

(因为这两种情况的交是全集)

当时因为Naive求了50次

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#define ll long long
using namespace std;
int a[*];
ll dp[*];
int main()
{
freopen("rob.in","r",stdin);
freopen("rob.out","w",stdout);
int n;
scanf("%d",&n);
for(int i=;i<=n;i++){scanf("%d",&a[i]);a[i+n]=a[i];}
ll res=-;
int tms=min(n,);
for(int i=;i<tms;i++)
{
memset(dp,,sizeof(dp));
for(int j=;j<=n;j++)
{
if(j>)dp[j]=dp[j-];
if(j>= && dp[j]<dp[j-])dp[j]=dp[j-];
dp[j]+=a[j+i];
}
dp[n]=max(dp[n-],dp[n-]);
res=max(res,dp[n]);
}
printf("%lld",res);
return ;
}

T2 destroy

有n个点m条边

现在删掉一些边 把图分为两个联通块 求两个联通块中权值之和最小值

我们跑一个最小生成树 再把其中最大的一条边砍掉 就可以保证 剩下的是两个联通块 且权值之和最小

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#define ll long long
using namespace std;
inline int read()
{
char ch=getchar();
int x=,f=;
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=*x+ch-'';ch=getchar();}
return x*f;
}
int n,m;
struct edg
{
int from,to;
ll val;
bool operator <(const edg b)const
{
return val<b.val;
}
}es[];
int cnt;
int fa[];
inline int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);} inline void add(int u,int v,int w)
{
es[cnt++]=(edg){u,v,w};
}
ll mx,sm;
void kruskal()
{
sort(es,es+cnt);
for(int i=;i<=cnt;i++)fa[i]=i;
for(int i=;i<cnt;i++)
{
int fx=find(es[i].from);
int fy=find(es[i].to);
if(fx!=fy)
{
mx=max(mx,es[i].val);
sm+=es[i].val;
fa[fx]=fy;
}
}
} int main()
{
freopen("destroy.in","r",stdin);
freopen("destroy.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
}
kruskal();
printf("%lld",sm-mx);
return ;
}

T3 permutation

给定n个数 求这n个数全排列中满足

对所有 2 ≤ i ≤ N - 1,都有 A[i - 1] + A[i + 1] ≥ 2 × A[i]

的方案数

50分 全排列

70分 状压 n^3*2^n

100分 爆搜

爆搜。。。

但是LZJ巨神告诉我们 事情并没有这么简单

首先  满足条件的序列肯定是下凸的单峰型

首先考虑序列

i  j  ... ...  l  k

现在要在这个序列左端插入一个x 只要满足 a[x]-a[j]>=2*a[i]就可以插进来 j l之间是什么数并不影响结果

右端插x同理

于是我们排序 枚举每个数往左插还是往右插

复杂度n^5

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#define ll long long
const int MOD=;
using namespace std;
inline int read()
{
char ch=getchar();
int x=,f=;
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=*x+ch-'';ch=getchar();}
return x*f;
}
int a[];
int n;
ll ans;
int dp[][][][];
bool vis[][][][];
int cnt[];
void dfs(int i,int j,int k,int l)
{
if(vis[i][j][k][l])return;
vis[i][j][k][l]=;
int mx=max(i,max(j,max(k,l)));
mx++;
if(mx==n)
{
if((!j||a[j]-a[i]>=a[i]-a[mx]) && (!l||a[l]-a[k]>=a[k]-a[mx])) (ans+=dp[i][j][k][l])%=MOD;
return;
}
for(int o=;o<=cnt[mx];o++)
{
bool flag1=,flag2=;
if(!j||a[mx]+a[j]>=*a[i]||!o)flag1=;
if(!l||a[mx]+a[l]>=*a[k]||!(cnt[mx]-o))flag2=;
if(flag1 && flag2)
{
int ni=i,nj=j,nk=k,nl=l;
if(o==)nj=i,ni=mx;
else if(o>)nj=ni=mx;
if(cnt[mx]-o==)nl=k,nk=mx;
else if(cnt[mx]-o>)nl=nk=mx;
(dp[ni][nj][nk][nl]+=dp[i][j][k][l])%=MOD;
}
}
} int main()
{
//freopen("permutation.in","r",stdin);
//freopen("permutation.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)a[i]=-read();
sort(a+,a+n+);
int tag=;
for(int i=;i<=n;i++)a[i]=-a[i];
for(int i=;i<=n;i++)
{
if(a[i]==a[tag])cnt[tag]++;
else
{
a[++tag]=a[i];
cnt[tag]=;
}
}
n=tag;
dp[][][][]=;
for(int i=;i<n;i++)
for(int j=;j<=i;j++)
for(int k=;k<=i;k++)
for(int l=;l<=k;l++)
{
dfs(i,j,k,l);
dfs(k,l,i,j);
}
for(int i=;i<=n;i++)
for(int j=;j<=cnt[i];j++)(ans*=j)%=MOD;
cout<<ans;
}

Orz LZJ

最后得分应该是80+100+50=230

(第一题爆int咯妈了个zz)

但是xgy错了一个价值80分的等号

yyc错了价值...不知道多少分反正好多好多分的三个字符

所以我好像是3个250中考的最高的Orz

noip模拟赛Bywzj52501 17.10.18的更多相关文章

  1. noip 模拟赛 After 17(递推+特殊的技巧)

    来源:Violet_II T1 好神的一题,我竟然没做出来QAQ 首先我们发现,答案是sigma(x[i]*x[j], i>j)+sigma(y[i]*y[j], i>j).显然只需要讨论 ...

  2. 10.17 NOIP模拟赛

    目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...

  3. 10.16 NOIP模拟赛

    目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...

  4. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  5. NOI.AC NOIP模拟赛 第五场 游记

    NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出 ...

  6. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  7. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  8. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  9. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

随机推荐

  1. Android之——清理手机SD卡缓存

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47375595 眼下,市场上非常多Android手机软件都具有清理SD卡缓存的功能, ...

  2. 用javascript简单写的判断电话号码

    在很多网站注册的时候,需要我们填写电话号码,本来想糊弄一下,但是还不行,一直提示不正确,我去网上搜了很多,正则表达式,发现有很多不对的, 最后写了一个简单的,但是比较实用的 首先是html部分的内容 ...

  3. Dire Wolf(区间DP)

    Dire Wolf Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others)Total ...

  4. 序列DP(输出有要求)

    DP Time Limit:10000MS     Memory Limit:165888KB     64bit IO Format:%lld & %llu Submit Status De ...

  5. java servlet中上传文件的简单实现(基于第三方jar)

    这里的案例使用了两种文件上传的组件.分别介绍 1.使用JSPSmartUpload完成上传 package test_servlet_package; import java.io.File; imp ...

  6. iphone传感器

    传感器 什么是传感器 传感器是一种感应\检测装置, 目前已经广泛应用于智能手机上 传感器的作用 用于感应\检测设备周边的信息 不同类型的传感器, 检测的信息也不一样 iPhone中的下面现象都是由传感 ...

  7. Symfony 使用KnpTimeBundle

    使用time_diff时出现:diff.ago.hour; 解决:1:引入"knplabs/knp-time-bundle": "^1.7",https://g ...

  8. ARDUINO MEGA2560 经过ESP8266 WIFI模块上传温湿度数据到 OneNet 服务器

    简述 原来写了一个C++的wifi库但是发现用c++ arduino这小身板有点扛不住,代码比较大,使用String类型数据处理速度慢,而且很容易无缘无故跑飞.而且封装成库后使用还需要修改arduin ...

  9. VS2015 下载 破解

    Visual Studio Professional 2015简体中文版(专业版): http://download.microsoft.com/download/B/8/9/B898E46E-CBA ...

  10. python基础14 ---函数模块4(configparser模块)

    configparser模块 一.configparser模块 1.什么是configparser模块:configparser模块操作配置文件,配置文件的格式与windows ini和linux的c ...