8.11

T1 给定一个序列M,求出能过构造出的序列使得(Si+Si+1)/2=Mi成立的序列个数.保证M,S递增。

T2 平面点集中最大的四边形面积

T3 不太懂得一道国家队选拔的加强版。

90+20+10=120 三题暴力

T1写了一个非常不正确的O(n)结果拿了90,T2只想到了n^3的做法,T3暴力

Sol:

T1显然知道S中的一个数就可以知道所有的S,每个S都可以由S1和Mi来表示,那么由于S是递增的就可以列出一些很有规律的不等式,解不等式即可。

不正确的做法就是对于每三个M的差,两边的和-中间的最小值。

T2四边形肯定会有一条的对角线那么枚举对角线,在枚举对角线的两端就能做到O(n^3)

会发现答案的四边形显然会在凸包上,那么离对角线最远的点总是单调的。

T3看了不会

 #include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define LL long long
using namespace std;
inline void Get_Int(LL &x)
{
x=; char ch=getchar();
while (ch<'' || ch>'') ch=getchar();
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
}
inline LL Min(LL x,LL y) {return x>y?y:x;}
inline LL Max(LL x,LL y) {return x>y?x:y;}
//========================
const LL Maxn=;
const LL Inf=(LL)<<;
LL M[Maxn],Ans,n;
int main()
{
Get_Int(n);
for (LL i=;i<=n;i++) Get_Int(M[i]);
LL Ret=M[],L=-Inf,R=M[];
for (int i=;i<n;i++)
{
if (i&) Ret=Ret+M[i]-M[i+];
else Ret=M[i+]-M[i]+Ret;
if (i&) L=Max(L,Ret);
else R=Min(R,Ret);
}
if (L>R) puts(""); else printf("%d\n",R-L+);
return ;
}

T1

 #include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const int Maxn=;
const double eps=1e-;
struct Node
{
double x,y;
Node (double x=,double y=):x(x),y(y){}
};
inline Node operator - (Node P,Node Q) {return Node(P.x-Q.x,P.y-Q.y);}
inline double Cross(Node P,Node Q) {return P.x*Q.y-P.y*Q.x;}
inline double Area(Node A,Node B,Node C) {return Cross(B-A,C-A);}
inline int dcmp(double x) {if (fabs(x)<eps) return ; return x>?:-;}
inline double Dis(Node O) {return sqrt(O.x*O.x+O.y*O.y);}
inline double Max(double x,double y) {return x>y?x:y;}
inline void Swap(Node &X,Node &Y) {Node T=X;X=Y;Y=T;}
//====================================
int n,Top;
double Ans;
Node P[Maxn],V[Maxn];
inline bool cmp(Node A,Node B)
{
if (dcmp(Area(P[],A,B))==) return Dis(A-P[])<Dis(B-P[]);
return Area(P[],A,B)>;
}
inline void Graham()
{
int k=;
for (int i=;i<=n;i++)
if (P[i].y<P[k].y || (dcmp(P[i].y-P[k].y)== && P[i].x<P[k].x)) k=i;
Swap(P[],P[k]);
sort(P+,P+n+,cmp);
V[]=P[],V[]=P[]; Top=;
for (int i=;i<=n;i++)
{
while (Top>= && Area(V[Top-],V[Top],P[i])<=) Top--;
V[++Top]=P[i];
}
}
inline void Work()
{
V[Top+]=V[]; Ans=;
for (int X=;X<=Top;X++)
{
int u=X%Top+,v=(X+)%Top+;
for (int Y=X+;Y<=Top;Y++)
{
while (u%Top+!=Y && fabs(Area(V[X],V[Y],V[u+]))>fabs(Area(V[X],V[Y],V[u]))) u=u%Top+;
while (v%Top+!=X && fabs(Area(V[X],V[Y],V[v+]))>fabs(Area(V[X],V[Y],V[v]))) v=v%Top+;
Ans=Max(Ans,fabs(Area(V[u],V[X],V[Y]))+fabs(Area(V[v],V[X],V[Y])));
}
}
}
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%lf%lf",&P[i].x,&P[i].y);
Graham();
Work();
printf("%.3lf\n",Ans/2.0);
return ;
}

T2

8.12 啊被虐爆了..

T1 有 M 个序列,要在每个序列里选一个元素出来,求元素总和第 K 小的值。

T2 平面上有n个凸包求两点间的最短路,不能穿过凸包。

T3 看不懂..

50+0+0=50

T1 一眼转化为第K短路模型然后50MLE了(循环队列的话应该没问题),T2 计算几何+Dij貌似出了点偏差,而且我在判断两条直线关系的时候居然是求出交点然后判断!(mdzz)

Sol:

T1 实际上非常暴力,把小根堆弹K次就行了,然后把当前的堆其中的一个序列把原来的删去,加入比他大的后一个。需要注意的是每次把所有的序列往后会有重复,所以要记录一个i,表示前1~i-1的都不能变化了

T2 M^3暴力枚举每个点判一下是否会相交即可,感觉类似于VIJOS中的有一道叫做围墙的题.

 #include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define PA pair<int,pair<int,vector<int> > > using namespace std;
inline void Get_Int(int &x)
{
x=; char ch=getchar();
while (ch<'' || ch>'') ch=getchar();
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
}
priority_queue<PA,vector<PA>,greater<PA> > Q;
int m,k,a[][];
vector<int> V;
int main()
{
Get_Int(m),Get_Int(k);
for (int i=;i<=m;i++)
{
Get_Int(a[i][]);
for (int j=;j<=a[i][];j++) Get_Int(a[i][j]);
sort(a[i]+,a[i]+a[i][]+);
}
int Ret=; for (int i=;i<=m;i++) Ret+=a[i][];
V.clear(); V.pb(); for (int i=;i<=m;i++) V.pb();
Q.push(mp(Ret,mp(,V)));
for (int i=;i<k;i++)
{
PA U=Q.top(); Q.pop();
for (int j=U.se.fi;j<=m;j++)
{
U.se.se[j]++;
Q.push(mp(U.fi+a[j][U.se.se[j]]-a[j][U.se.se[j]-],mp(j,U.se.se)));
U.se.se[j]--;
}
}
printf("%d\n",Q.top().fi);
return ;
}

T1

 #include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define pa pair<int,int>
#define PA pair<double,int>
using namespace std;
inline void Get_Int(int &x)
{
x=; char ch=getchar();
while (ch<'' || ch>'') ch=getchar();
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
}
const int Maxn=;
const double eps=1e-;
int Begin[Maxn],End[Maxn],num[Maxn],tot,n,S,T;
double f[Maxn][Maxn],dis[Maxn];
bool vis[Maxn];
vector<pa> Line;
struct Vector
{
double x,y;
Vector(double x=,double y=):x(x),y(y){}
}P[Maxn];
inline Vector operator - (Vector A,Vector B) {return Vector(A.x-B.x,A.y-B.y);}
inline double Cross(Vector A,Vector B) {return A.x*B.y-A.y*B.x;}
inline double Area(Vector A,Vector B,Vector C) {return Cross(B-A,C-A);}
inline double Dis(Vector A) {return sqrt(A.x*A.x+A.y*A.y);}
inline int dcmp(double x) {if (fabs(x)<eps) return ; return x>?:-;}
inline bool Pan(int u,int v,int p,int q)
{
int s=Area(P[u],P[p],P[q]);
int t=Area(P[v],P[p],P[q]);
if (dcmp(s)*dcmp(t)==-) return true;
return false;
}
inline bool Pan2(int u,int v,int p,int q)
{
int s=Area(P[u],P[p],P[q]);
int t=Area(P[v],P[p],P[q]);
if (dcmp(s)*dcmp(t)==) return true;
return false;
}
inline bool Check(int u,int v)
{
for (int i=;i<=n;i++)
{
int Cnt=;
for (int j=Begin[i];j<=End[i];j++)
{
if (Pan(u,v,Line[j].fi,Line[j].se) && Pan(Line[j].fi,Line[j].se,u,v)) return false;
if (Pan2(u,v,Line[j].fi,Line[j].se) || Pan2(Line[j].fi,Line[j].se,u,v)) Cnt++;
}
if (Cnt>=) return false;
}
return true;
}
priority_queue<PA,vector<PA>,greater<PA> > Q;
void Dij()
{
for (int i=;i<=tot;i++) dis[i]=10000000.0;
memset(vis,false,sizeof(vis));
dis[S]=;
Q.push(mp(0.0,S));
while (!Q.empty())
{
int u=Q.top().se; Q.pop();
if (vis[u]) continue; vis[u]=true;
for (int i=;i<=tot;i++)
if (u!=i && f[u][i]!=- && dis[i]>dis[u]+f[u][i])
{
dis[i]=dis[u]+f[u][i];
Q.push(mp(dis[i],i));
}
}
}
int main()
{ Get_Int(n);
Line.pb(mp(,));
for (int i=;i<=n;i++)
{
Get_Int(num[i]); Begin[i]=tot+;
for (int j=;j<=num[i];j++)
{
tot++; scanf("%lf%lf",&P[tot].x,&P[tot].y);
if (j!=) Line.pb(mp(tot,tot-));
}
Line.pb(mp(tot,tot-num[i]+)); End[i]=tot;
}
Get_Int(S),Get_Int(T);
for (int i=;i<=tot;i++)
for (int j=;j<=tot;j++)
{
if (i==j) {f[i][j]=0.0; continue;}
if (Check(i,j)) f[i][j]=Dis(P[i]-P[j]); else f[i][j]=-;
}
Dij();
printf("%.4lf\n",dis[T]);
return ;
}

T2

8.13

T1 定义两个函数f,g,并求出g(n)的值:f(n)为所有小于n的与n互质的数之和,g(n)为所有所有n的约数的f的和..

T2 DP 难以描述

T3 MST难以描述

30+50+30=110 三题暴力

T1

30:暴力枚举

60:然后会发现f其实可以用容斥算出来即,比如算f(60),先 O(sqrt(N))的时间,找出60的质因子有哪些。得到它的质因子2,3,5后,f(60) = 所有数的和-2的倍数的和-3的倍数的和-5的倍数的和+6(2*3)的倍数的和+10(2*5)的倍数的和+15(3*5)的倍数的和-30(2*3*5) 的倍数的和(当然这里的数都限定在60以内)。

100:有个规律及f(n)=n*φ(n)/2,Prove:(加入a与n互素呢么n-a与n也互素,反之则不互素,那么(a,n-a)的和刚好为n,而却总共有φ(n)/2对);

g(n)=∑x*φ(x)/2,因为φ具有积性可以把它分解为每个质因数的乘积即可.

T2  DP +然后用数据结构维护即可

T3

30:暴力重建MST

60:会发现重边非常多,那么对于每条重边建个卡壳就可以了。

100:奥妙重重的做法

 #include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define LL long long
using namespace std; inline void Get_Int(LL &x)
{
x=; char ch=getchar();
while (ch<'' || ch>'') ch=getchar();
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
}
//==============================
LL Kase,n,Ans;
inline LL Calc(LL a,LL b)
{
LL q=a*a,fr=q-a,r=;
for (LL i=;i<=b;i++) r+=fr,fr*=q;
return r;
}
int main()
{
freopen("shobera.in","r",stdin);
freopen("shobera.out","w",stdout);
Get_Int(Kase);
for (LL kase=;kase<=Kase;kase++)
{
Get_Int(n); LL t=n; Ans=;
for (LL i=;i*i<=n;i++)
if (t%i==)
{
LL Ret=;
for (;t%i==;t/=i) Ret++;
Ans*=Calc(i,Ret);
}
if (t>) Ans*=Calc(t,);
printf("%lld\n",(Ans+)>>);
}
return ;
}

T1

8.15

T1 难以表述的DP

T2 求序列第K大

T3 求分数在K进制下的有循环节长度

Sol :

T

8.17

T1 输出一定长度的升子序列

T2 数据结构,在线修改一段区间的颜色为一种颜色,询问某段区间的某个颜色个数

T3 使得a[i]>b[j]的对数

10+60+60

T1 就nlogn的发现要按照字典序输出,WA 10

T2 线段树暴力可以做到60,再大开不下了

T3 一眼网络流..mdzz 60

Sol :

T1 :那么如BZOJ1046中但是BZOJ1046中的位置,而这道题中的是权值,离散化一下就可以了。

T2 :可以有分块以时间换空间

T3 :水题贪心,拍完须后,同BZOJ1707

NOIP 赛前模拟记录的更多相关文章

  1. 刷题总结——纸带(NOIP赛前模拟)

    题目: 有一个无限长的纸带··上面被划分为若干个格子··现在进行N次操作,第i次操作在L到R上擦出曾经写上的数字(如果有),并写上数字i,询问最终可以看到多少个数字 N小于10^6 题解: 首先毫无疑 ...

  2. NOIP赛前模拟20171027总结

    题目: 1.寿司 给定一个环形的RB串··要求经过两两互换后RB分别形成两段连续区域,求最少操作次数(算法时间O(n)) 2.金字塔 给定一个金字塔的侧面图有n层··已知每一层的宽度··高度均为1·· ...

  3. NOIP赛前集训备忘录(含每日总结)(日更?。。。)

    NOIP赛前集训备忘录(含每日考试总结) 标签: 有用的东西~(≧▽≦)/~啦啦啦 阅读体验:https://zybuluo.com/Junlier/note/1279194 考试每日总结(这个东西是 ...

  4. 牛客网NOIP赛前集训营-提高组(第四场)游记

    牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...

  5. 2018年牛客网NOIP赛前训练营游记

    2018年牛客网NOIP赛前训练营游记 提高组(第一场) 中位数 #include<cstdio> #include<cctype> #include<climits&g ...

  6. 牛客网NOIP赛前集训营-提高组(第四场)B区间

    牛客网NOIP赛前集训营-提高组(第四场)B区间 题目描述 给出一个序列$ a_1  \dots   a_n$. 定义一个区间 \([l,r]\) 是好的,当且仅当这个区间中存在一个 \(i\),使得 ...

  7. 牛客网NOIP赛前集训营-提高组(第四场)B题 区间

    牛客网NOIP赛前集训营-提高组(第四场) 题目描述 给出一个序列 a1, ..., an. 定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ...

  8. NOIP前模拟赛总结

    NOIP前模拟赛总结 from 2018.10.7 to ??? Date Name Score(Rank) Problems 2018.10.7 McfXH AK Contest 42(?) 期望得 ...

  9. 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告

    目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...

随机推荐

  1. SQL Server 日期转换到字符串

    0 Feb 22 2006 4:26PM CONVERT(CHAR(19),   CURRENT_TIMESTAMP, 0) 1 02/22/06 CONVERT(CHAR(8),   CURRENT ...

  2. redhat自定义安装必选

    redhat自定义安装必选 1.桌面 ked桌面 x 窗口系统 2.应用程序 编辑器 基于文本的互联网 图形互联网 3.服务器 服务器配置工具 万维网服务器 Windows文件 FTP服务器

  3. python 执行execute遇到的问题

    1.如下方式去查询无法查询出结果,但直接在数据库查询中去查询是能查询到结果的,郁闷中,花了很久的时间才知道原来是双引号导致的 把:name="%s" 中的%s前后的双引号去掉就对了 ...

  4. 编辑美化图片,保存至本地,Adobe出品(支持IOS,android,web调用)免费插件

    本例以web调用做为例子,本插件支持主流浏览器,IE要9以上,移动设备,触屏设备也支持,能自适应屏幕大小. 使用效果: 工具还是很丰富的,编辑完成之后,可以保存图片至本地目录. 使用说明: 1,需要在 ...

  5. 简单的例子 关于Java内存管理的讲解

    我想做的是,逐行读取文件,然后用该行的电影名去获取电影信息.因为源文件较大,readlines()不能完全读取所有电影名,所以我们逐行读取. 就这段代码,我想要在位置二处使用base64,然后结果呢? ...

  6. 用ORBSLAM2运行TUM Dataset数据集

    参照https://github.com/raulmur/ORB_SLAM2/blob/master/README.md 运行 4. Monocular Examples TUM Dataset 数据 ...

  7. (SenchaTouch+PhoneGap)开发笔记(2)开发环境搭建二

    一.Java环境和Android SDK  1.安装JDK和JRE JRE会在JDK安装完成后自动出现安装界面. 安装完成后,设置环境变量 JAVA_HOME    D:\Program Files\ ...

  8. SetProcessAffinityMask的问题

    BOOL WINAPI SetProcessAffinityMask( _In_ HANDLE hProcess, _In_ DWORD_PTR dwProcessAffinityMask );//M ...

  9. T-SQL中找出一个表的所有外键关联表

    二种方法(下例中表名为T_Work) 1.SQL查询系统表 SELECT 主键列ID=b.rkey ,主键列名=(SELECT name FROM syscolumns WHERE colid=b.r ...

  10. bzoj 3172 单词 ac自动机|后缀数组

    题目大意: 给定n个字符串连成了一篇文章,问每个字符串在这篇文章中出现的次数,可重复覆盖 这里ac自动机和后缀数组都可以做 当然后缀数组很容易就解决,但是相对时间消耗高 这里就只讲ac自动机了 将每个 ...