18/9/22NOIP模拟考
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模拟考的更多相关文章
- 18.4.09 模拟考 zhx P75
题目链接 https://files.cnblogs.com/files/lovewhy/P75.pdf P75 竞赛时间: ????年??月??日??:??-??:?? 注意事项(请务必仔细阅读) ...
- 18/9/21模拟赛-Updated
18/9/21模拟赛 期望得分:100:实际得分:0 qwq 拿到题目第一眼,我去,这不是洛谷原题(仓鼠找Sugar)吗 又多看了几眼,嗯,对,除了是有多组数据外,就是原题 然后码码码....自以为 ...
- Noip模拟考第三题——饥饿游戏
饥饿游戏 (hungry.pas/c/cpp) [问题描述] Chanxer饿了,但是囊中羞涩,于是他去参加号称免费吃到饱的“饥饿游戏”. 这个游戏的规则是这样的,举办者会摆出一排 个食物,希望你能够 ...
- 2018年小米高级 PHP 工程师面试题(模拟考试卷)
1.通过哪一个函数,可以把错误转换为异常处理? A:set_error_handler B:error_reporting C:error2exception D:catch 正确答案:A 答案分析: ...
- [7.22NOIP模拟测试7]方程的解 题解(扩展欧几里得)
Orz 送分比较慷慨的一道题,疯狂特判能拿不少分. 对于$a>0,b>0$的情况: 用exgcd求出方程通解,然后通过操作得到最小正整数解和最大正整数解 他们以及他们之间的解满足等差数列性 ...
- 6.18 省选模拟赛 树 倍增 LCT
LINK:树 考虑暴力 保存每个版本的父亲 然后暴力向上跳.得分20. 考虑离线 可以离线那么就可以先把树给搞出来 然后考虑求k级祖先 可以倍增求. 如何判断合法 其实要求路径上的边的时间戳<= ...
- 11.12模拟考T1(可持续优化)PS:神奇的东西
1.数列操作 (array.pas/c/cpp) [问题描述] 现在有一个数列,最初包含0个数.现在要对数列操作n次,操作有3类. 1) a k,在数列的最后插入一个整数k 2) s 将最近插入的 ...
- 11.12模拟考T2(GCD)
2.梅花桩 (blossom.pas/c/cpp) [问题描述] 小x在练习一门轻功,这门轻功是在梅花桩上跳来跳去,这门轻功是严格按照直线从一个梅花桩直接跳到另外一个梅花桩上.因为小x有恐高症,所 ...
- 论人品 | | noip1015模拟考
第一题:火车进站... 由于有了老师给的助攻,第一题的时间为半小时,主要在读题了.... jzoj1146 第二题:car 难在正方形的计算? 第二题时间:1.5hour 第三题:sort排序?
随机推荐
- CF732F Tourist Reform(边双联通)
题意 在一张有向图中,设 ri 为从点 i 出发能够到达的点的数量. 定义有向图的“改良值”为 ri 的最小值. 现给出一张无向图,要求给每条边定一个方向,使产生的有向图“改良值”最大. 输出 最大改 ...
- java钩子函数
也不知道我理解的对不对,欢迎大家讨论! 自己写了个钩子函数,我理解的钩子函数: public interface Transactioner { String wedontknow() ; } pub ...
- 阿里云主机centos设置虚拟内存
http://blog.csdn.net/luwei42768/article/details/51241758 https://my.oschina.net/u/2306127/blog/65726 ...
- Android Studio的Signature Versions选择,分别是什么意思
转自原文 Android Studio的Signature Versions选择,分别是什么意思 打包一个文件的签名版本, 选V1打包出来的app是jar的(一般这种就是当做第三方导入项目来用的), ...
- C#+ArcGIS Engine 获取地图中选中的要素
转自 C#+ArcGIS Engine 获取地图中选中的要素 C#+ArcGIS Engine 获取地图中选中的要素 提供一种简单遍历获取地图中选中要素的方法,代码如下: List<IFeatu ...
- 网站及监控利器 Pandora FMS使用体验
Pandora FMS 是一个 开源的应用程序 ,用来监测网站的各种活动,它可以收到实时的监测报告,并发送到你指定的邮箱,也可以通过e-mail, SMS 发送. 650) this.width=65 ...
- 链接服务器T-sql语句
https://bbs.csdn.net/topics/230059074 https://www.cnblogs.com/vinsonLu/p/4456027.html 不同服务器数据库之间的数据操 ...
- SQL 查找存在某内容的存储过程
--查找存在某表名的存储过程 SELECT distinct b.name from syscomments a,sysobjects b WHERE a.id=b.id and a.TEXT LIK ...
- 【Django】视图系统
目录 FBV 与 CBV 给视图加装饰器 使用装饰器装饰CBV 关于dispatch()方法 Request对象 与 Response对象 request对象 response对象 @ *** 一个视 ...
- 处理某客户p570硬盘故障所思
p570,硬盘故障. 机器有两个vg,rootvg和datavg,rootvg未做镜像,datavg已做镜像.系统errpt和HMC报硬盘有问题,查看错误代码可能是硬盘有坏道(坏块),在尽量保全用户数 ...