18/9/22NOIP模拟考

其实本来是有多组数据的,出题人忘记在题面上加了   斜眼笑

期望得分:100;实际得分:100

由于种种原因,拿到题的时候已经过去了0.5h+。。。

然后因为这道题数据范围比较大,所以。。就想到了找规律

没想到居然A了  开心

这道题一共出现了三种做法:

1.出题人的std:据说是旋转坐标系什么鬼的,没听说过。。。

2.某人:从一个点做一个斜率为±1的一次函数,然后。。。如图

3.大部分人(包括我):分别求出两点横纵坐标之差的绝对值,然后取max,完事

4.极少部分人:模拟 or 暴力?

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
typedef long long LL;
LL n, s, t, c, f; int main() {
freopen("grid.in","r",stdin);
freopen("grid.out","w",stdout);
scanf("%I64d%I64d%I64d%I64d%I64d", &n, &s, &t, &c, &f);
LL a = abs(s - c), b = abs(t - f);
cout << max(a, b) << '\n';
fclose(stdin); fclose(stdout);
return ;
}

极其简短的我的代码 qwq

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cctype>
#include<cmath>
#include<set>
#include<map>
#include<queue>
#include<vector>
#include<cassert>
using namespace std;
typedef long long LL; inline int read() {
int x = , f = ; char ch = getchar(); for (; !isdigit(ch); ch=getchar()) if (ch=='-') f = -;
for (; isdigit(ch); ch=getchar()) x = x * + ch - ''; return x * f;
} LL dx[] = {, , , -};
LL dy[] = {, -, , }; LL getdis(LL a,LL b,LL c,LL d,int flag) {
if (flag) { // black
a = (a - ) / , b = (b - ) / , c = (c - ) / , d = (d - ) / ;
return abs(a - c) + abs(b - d);
}
else { // white
a /= , b /= , c /= , d /= ;
return abs(a - c) + abs(b - d);
}
}
void getxy(LL a,LL b,LL &t1,LL &t2) {
t1 = a + b,t2 = b - a;
}
int main() { freopen("grid.in","r",stdin);
freopen("grid.out","w",stdout); LL Case,n, a, b, c, d, t1, t2, t3, t4, t5, t6;
// cin >> Case;
// while (Case--) { cin >> n >> a >> b >> c >> d; assert(a <= n);
assert(b <= n);
assert(c <= n);
assert(d <= n); t1 = a + b, t2 = b - a;
t3 = c + d, t4 = d - c; int f1, f2;
if ((t1 & ) && (t2 & )) f1 = ;
else f1 = ;
if ((t3 & ) && (t4 & )) f2 = ;
else f2 = ; LL ans = 1e18;
if (f1 == f2) ans = getdis(t1, t2, t3, t4, f1);
else {
for (int i=; i<; ++i) {
LL x = a + dx[i], y = b + dy[i];
if (x >= && x <=n && y >= && y <= n) {
getxy(x, y, t5, t6);
ans = min(ans, getdis(t3, t4, t5, t6, f2) + );
}
}
for (int i=; i<; ++i) {
LL x = c + dx[i], y = d + dy[i];
if (x >= && x <=n && y >= && y <= n) {
getxy(x, y, t5, t6);
ans = min(ans, getdis(t1, t2, t5, t6, f1) + );
}
}
}
cout << ans << "\n";
// }
return ;
}

std

期望得分:0;实际得分:0

其实还是希望有些分的,然而暴力没有调出来。。。

然后就gg了 qwq

正解:如果写了dfs的话,可以看出:我们只要知道上次填的串多长,就可以知道上次使用的字符串。而且对每个位置只需要知道它上次填2或3时是否可行。

$f[i][2/3]$表示当前到$i$,以$i$开头,长度为2/3的的后缀串是否可行。可以转移就记录答案。

如果type ≠ 0,则不需要判断后缀是否相同

为了方便,可以把串反过来

复杂度:O(n)

#include <cstdio>
#include <cstring>
#include <algorithm>
#define pc putchar
const int N=; bool f[N][]/*0:2 1:3*/,ok2[][],ok3[][][];
char s[N]; void Work(const int type) {
memset(f,,sizeof f);
memset(ok2,,sizeof ok2), memset(ok3,,sizeof ok3); scanf("%s",s+);
int n=strlen(s+);
std::reverse(s+,s++n); int tot=; n-=;
if(n>=) f[][]=, ++tot, ok2[s[]-'a'][s[]-'a']=;
if(n>=) f[][]=, ++tot, ok3[s[]-'a'][s[]-'a'][s[]-'a']=; for(int i=; i<=n; ++i) {
int a=s[i]-'a', b=s[i-]-'a', c=s[i-]-'a';
if(f[i-][]||(f[i-][]&&(type||s[i]!=s[i-]||s[i-]!=s[i-]))) {
f[i][]=;
if(!ok2[a][b]) ++tot, ok2[a][b]=;
}
if(f[i-][]||(f[i-][]&&(type||s[i]!=s[i-]||s[i-]!=s[i-]||s[i-]!=s[i-])))//i>=6
{
f[i][]=;
if(!ok3[a][b][c]) ++tot, ok3[a][b][c]=;
}
}
printf("%d\n",tot);
for(int i=; i<&&tot; ++i) {
for(int j=; j<; ++j) {
if(ok2[i][j]) --tot,pc(i+'a'),pc(j+'a'),pc('\n');
for(int k=; k<; ++k)
if(ok3[i][j][k]) --tot,pc(i+'a'),pc(j+'a'),pc(k+'a'),pc('\n');
}
}
} int main() {
freopen("ling.in","r",stdin);
freopen("ling.out","w",stdout); int T,type;
for(scanf("%d%d",&T,&type); T--; Work(type));
return ;
}

std

一看要求期望。。。一脸不可做。。。

整场考试也就瞄了几眼,一点想做的念头都没有。。。

蒻的一批。。。

事实证明,真心难啊 qwq

#include <cstdio>
#include <cctype>
#include <assert.h>
#include <algorithm>
#define gc() getchar()
const int N=5e5+; int n,sz[N],fa[N],q[N],H[N],Enum,to[N],nxt[N];
double pw[N];//2^{-i} inline int read() {
int now=;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*+c-'',c=gc());
return now;
}
inline void AddEdge(int u,int v) {
fa[v]=u, ++sz[u], ++sz[fa[u]];
to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;
}
double Calc(int x) {
if(!sz[x]) return ;//sz:子树内点数
int t=;//t:子节点数
for(int i=H[x]; i; i=nxt[i]) q[t++]=to[i];
if(t==sz[x])//D=2
return -pw[t];
else {
double ans=;
for(int s=; s<<<t; ++s) {
int tot=;
for(int i=; i<t; ++i)
if(s>>i&)
for(int j=H[q[i]]; j; j=nxt[j])
assert(!H[to[j]]), ++tot;
ans+=pw[t]*(pw[tot]*+(-pw[tot])*);
}
return ans;
}
}
void Subtask3(int Q) {
static int dep[N];
int H=; dep[]=;
while(Q--) {
int opt=read(),x=read();
if(opt==) dep[++n]=++H;
else {
int h=H-dep[x];
double ans=h*pw[h];
for(int i=; i<h; ++i) ans+=i*pw[i+];
printf("%.10lf\n",ans);
}
}
} int main() {
freopen("threebody.in","r",stdin);
freopen("threebody.out","w",stdout); n=;
int T=read(), Q=read(); pw[]=;
for(int i=; i<=Q; ++i) pw[i]=pw[i-]*0.5; if(T==) {Subtask3(Q); return ;} while(Q--) {
int opt=read(),x=read();
if(opt==) AddEdge(x,++n);
else if(T==) printf("%.10lf\n",-pw[sz[x]]);//Subtask2
else printf("%.10lf\n",Calc(x));//Subtask1
}
return ;
}

subtask1.2.3.

#include <cstdio>
#include <cctype>
#include <assert.h>
#include <algorithm>
#define gc() getchar()
#define MAX_H 60
const int N=5e5+; int n,fa[N];
double f[N][MAX_H]; inline int read() {
int now=;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*+c-'',c=gc());
return now;
} int main() {
freopen("threebody.in","r",stdin);
freopen("threebody.out","w",stdout); n=;
for(int i=; i<MAX_H; ++i) f[][i]=;
for(int T=read(), Q=read(); Q--; ) {
int opt=read(),x=read();
if(opt==) {
fa[++n]=x;
for(int i=; i<MAX_H; ++i) f[n][i]=;
double tmp1=f[x][],tmp2;
f[x][]*=0.5;
for(int Fa=fa[x],i=; Fa&&i<MAX_H; Fa=fa[x=Fa],++i) {
tmp2=f[Fa][i];
f[Fa][i] /= 0.5 + 0.5*tmp1;
f[Fa][i] *= 0.5 + 0.5*f[x][i-];
tmp1=tmp2;
}
}
else {
double ans=; assert(x<=n);
for(int i=; i<MAX_H; ++i) ans+=(f[x][i]-f[x][i-])*i;
printf("%.10lf\n",ans);
}
}
return ;
}

正解

18/9/22NOIP模拟考的更多相关文章

  1. 18.4.09 模拟考 zhx P75

    题目链接 https://files.cnblogs.com/files/lovewhy/P75.pdf P75 竞赛时间: ????年??月??日??:??-??:?? 注意事项(请务必仔细阅读) ...

  2. 18/9/21模拟赛-Updated

    18/9/21模拟赛 期望得分:100:实际得分:0  qwq 拿到题目第一眼,我去,这不是洛谷原题(仓鼠找Sugar)吗 又多看了几眼,嗯,对,除了是有多组数据外,就是原题 然后码码码....自以为 ...

  3. Noip模拟考第三题——饥饿游戏

    饥饿游戏 (hungry.pas/c/cpp) [问题描述] Chanxer饿了,但是囊中羞涩,于是他去参加号称免费吃到饱的“饥饿游戏”. 这个游戏的规则是这样的,举办者会摆出一排 个食物,希望你能够 ...

  4. 2018年小米高级 PHP 工程师面试题(模拟考试卷)

    1.通过哪一个函数,可以把错误转换为异常处理? A:set_error_handler B:error_reporting C:error2exception D:catch 正确答案:A 答案分析: ...

  5. [7.22NOIP模拟测试7]方程的解 题解(扩展欧几里得)

    Orz 送分比较慷慨的一道题,疯狂特判能拿不少分. 对于$a>0,b>0$的情况: 用exgcd求出方程通解,然后通过操作得到最小正整数解和最大正整数解 他们以及他们之间的解满足等差数列性 ...

  6. 6.18 省选模拟赛 树 倍增 LCT

    LINK:树 考虑暴力 保存每个版本的父亲 然后暴力向上跳.得分20. 考虑离线 可以离线那么就可以先把树给搞出来 然后考虑求k级祖先 可以倍增求. 如何判断合法 其实要求路径上的边的时间戳<= ...

  7. 11.12模拟考T1(可持续优化)PS:神奇的东西

    1.数列操作   (array.pas/c/cpp) [问题描述] 现在有一个数列,最初包含0个数.现在要对数列操作n次,操作有3类. 1) a k,在数列的最后插入一个整数k 2) s 将最近插入的 ...

  8. 11.12模拟考T2(GCD)

    2.梅花桩   (blossom.pas/c/cpp) [问题描述] 小x在练习一门轻功,这门轻功是在梅花桩上跳来跳去,这门轻功是严格按照直线从一个梅花桩直接跳到另外一个梅花桩上.因为小x有恐高症,所 ...

  9. 论人品 | | noip1015模拟考

    第一题:火车进站... 由于有了老师给的助攻,第一题的时间为半小时,主要在读题了.... jzoj1146 第二题:car 难在正方形的计算? 第二题时间:1.5hour 第三题:sort排序?

随机推荐

  1. bzoj 2259: [Oibh]新型计算机 最短路 建模

    Code: #include<cstdio> #include<cstring> #include<algorithm> #include<queue> ...

  2. iOS开发——打包报错error: linker command failed with exit code 1

    真机运行没问题,打包报错: clang: error: linker command failed with exit code 1 (use -v to see invocation) 原因:在Xc ...

  3. Python 上下文(Context)学习笔记

    前言 最早接触到with语句的时候,是初学python,对文件进行读写的时候,当时文件读写一般都是用open()函数来对文件进行读写,为了防止读写的过程中出现错误,也为了让代码更加的pythonic, ...

  4. Spring EL表达式和资源调用

    Spring EL表达式     Spring EL-Spring表达式语言,支持在xml和注解中使用表达式,类似于在jsp的EL表达式语言.     Spring 开发中经常涉及调用各种资源的情况, ...

  5. Unity Shader (一)ShaderLab 语法

    一.什么是Shader Shader(着色器):是可以在GPU上运行的一段程序,通过Shader可以进行一些渲染相关的设置. 二.什么是ShaderLab 目前面向GPU的编程有三种高级图像语言:HL ...

  6. 题解 CF1000E 【We Need More Bosses】

    这道题绝不是紫题... 题目的意思其实是让你求一个无向无重边图的直径. 对于求直径的问题我们以前研究过树的直径,可以两遍dfs或者两边bfs解决. 对于图显然不能这样解决,因为图上两点之间的简单路径不 ...

  7. 基于BP神经网络的简单字符识别算法自小结(C语言版)

    本文均属自己阅读源代码的点滴总结.转账请注明出处谢谢. 欢迎和大家交流.qq:1037701636 email:gzzaigcn2009@163.com 写在前面的闲话: 自我感觉自己应该不是一个非常 ...

  8. BZOJ 4034 线段树+DFS序

    思路: 先搞出来每个点的DFS序 (要有入栈和出栈两种状态的) 处理出来 线段树区间有多少入栈的和多少出栈的 加区间的时候就加(入-出)*wei 查前缀和 //By SiriusRen #includ ...

  9. ps切图时常用的操作与快捷键

    一:两种切片方法 第一种: 1.使用切片工具划分好你要切的模块 2.点击'存储为web所有格式',在存储之前可以修改图片的品质来改变文件的大小. 3.在存储时切片有三种选择方式,按照自己的需要选择. ...

  10. web.config添加identity impersonate="true"导致拒绝访问

    例:<identity impersonate="tr" userName="AD\name" password="word"/> ...