[考试总结]noip模拟45
真开心,挂没了。。
考完:"你们怎么第二题打了这么点分,明明一个爆搜就有65pts!!!怎么跟别人打?!"
然后我看了看我的爆搜,30pts。
然后认为自己打爆了。。。
我又想为什么会有这么多分,还是在大一点的测试点上:


然后我知道了。。
打表
一个看不懂题目的题。。。。
然而是一个结论题。。
答案就是:
\]
就这???
就这。
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
#define asm(i,x) for(register signed i=head[x];i;i=edge[i].next)
namespace xin_io
{
#define sb(x) cout<<#x" = "<<x<<' '
#define jb(x) cout<<#x" = "<<x<<endl
#define debug cout<<"debug"<<endl
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
char buf[1<<20],*p1 = buf,*p2 = buf; int ak; typedef long long ll; typedef unsigned long long ull;
class xin_stream{public:template<typename type>inline xin_stream &operator >> (type &s)
{
register int f = 0;s = 0; register char ch = gc();
while(!isdigit(ch)) {f |= ch == '-'; ch = gc();}
while( isdigit(ch)) s = (s << 1) + (s << 3) + (ch xor 48),ch = gc(); return s = f ? -s : s,*this;
}}io;
}
using namespace xin_io; static const int maxn = 1e6+10,inf = 1e9+7; const ll llinf = 1e18+7;
#define int long long
namespace xin
{
const int mod = inf;
inline int ksm(int x,int y)
{
int ret = 1;
while(y)
{
if(y & 1) ret = ret * x % mod;
x = x * x % mod; y >>= 1;
}
return ret;
}
int ans = 0;
int k,pos;
int a[maxn];
inline short main()
{
io >> k >> pos; int er = ksm(2,k); er = ksm(er,mod-2);
try(i,0,(1 << k) - 1) io >> a[i];
try(i,0,(1 << k) - 1) (ans += abs(a[i] - a[pos])% mod) %= mod;
cout<<ans * er % mod<<endl;
return 0;
}
}
signed main() {return xin::main();}
蛇
这个题目爆搜很多分,就是数组。。。。。
不说了。。。
然后贴一个 \(60pts\) 的爆搜吧。。。
因为正解还没改出来。。。
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
#define asm(i,x) for(register signed i=head[x];i;i=edge[i].next)
namespace xin_io
{
#define sb(x) cout<<#x" = "<<x<<' '
#define jb(x) cout<<#x" = "<<x<<endl
#define debug cout<<"debug"<<endl
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
#define scanf ak = scanf
int ak; typedef long long ll; typedef unsigned long long ull;
}
using namespace xin_io; static const int maxn = 1e6+10,inf = 1e9+7; const ll llinf = 1e18+7;
namespace xin
{
#define mp std::make_pair
const int dx[] = {0,1,-1,0,0},dy[] = {0,0,0,1,-1};
char s[3][maxn];
char ake[maxn];
int l,ans = 0,m;
bool vis[5001][5001];
std::vector<std::pair<int,int> >vec;
std::map<std::vector<std::pair<int,int> >,int>ji;
void dfs(int now,int x,int y)
{
try(i,1,4)
{
register int nx = x + dx[i],ny = y + dy[i];
if(nx >= 1 and nx <= 2 and ny >= 1 and ny <= m and !vis[nx][ny] and s[nx][ny] == ake[now+1])
{
if(now == l-1)
{
vec.push_back(mp(nx,ny));
if(!ji[vec])
ji[vec] = 1,ans++;
vec.pop_back();
}
else
{
vec.push_back(mp(nx,ny));
vis[nx][ny] = 1,dfs(now+1,nx,ny),vis[nx][ny] = 0;
vec.pop_back();
}
}
}
}
inline short main()
{
scanf("%s%s%s",s[1]+1,s[2]+1,ake+1);
m = strlen(s[1]+1);
l = strlen(ake+1);
if(l == 1)
{
try(i,1,2) try(j,1,m) if(s[i][j] == ake[1])
ans++;
cout<<ans<<endl;
return 0;
}
try(i,1,2) try(j,1,m) if(s[i][j] == ake[1]) vis[i][j] = 1,vec.push_back(mp(i,j)),dfs(1,i,j),vec.pop_back(),vis[i][j] = 0;
cout<<ans<<endl;
return 0;
}
}
signed main() {return xin::main();}
购物
有个结论。。。
然而不太能推出来。。

题解多好。。
然而我不是这么做的。。。
嘿嘿嘿。。。
将权值放入桶中,然后排序,之后进行二分查找。。
正确性显然
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
#define asm(i,x) for(register signed i=head[x];i;i=edge[i].next)
namespace xin_io
{
#define sb(x) cout<<#x" = "<<x<<' '
#define jb(x) cout<<#x" = "<<x<<endl
#define debug cout<<"debug"<<endl
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
char buf[1<<20],*p1 = buf,*p2 = buf; int ak; typedef long long ll; typedef unsigned long long ull;
class xin_stream{public:template<typename type>inline xin_stream &operator >> (type &s)
{
register int f = 0;s = 0; register char ch = gc();
while(!isdigit(ch)) {f |= ch == '-'; ch = gc();}
while( isdigit(ch)) s = (s << 1) + (s << 3) + (ch xor 48),ch = gc(); return s = f ? -s : s,*this;
}}io;
}
using namespace xin_io; static const int maxn = 1e6+10,inf = 1e9+7; const ll llinf = 1e18+7;
#define int long long
namespace xin
{
int w[maxn];
int n;
inline short main()
{
io >> n;
try(i,1,n) io >> w[i]; int pre = 0 ,temp = n;
std::sort(w+1,w+n+1);
try(i,1,temp) pre = pre + w[i],w[++n] = pre;
std::sort(w+1,w+n+1);
//n = std::unique(w+1,w+n+1) - (w + 1);
int now = w[n],vis = 0,ans = 0;
while(now)
{
register int mid = (now + 1) >> 1; ans += now - mid + 1 - vis;
temp = std::lower_bound(w+1,w+n+1,mid) - w;
if(now == w[temp]) now = w[temp - 1],vis = 0;
else now = w[temp],vis = now - mid + 1;
}
cout<<ans<<endl;
return 0;
}
}
signed main() {return xin::main();}
ants
这个题目是我一生的耻辱!!!!!!
在这场考试的前一天,我做到了莫队算法专题的倒数第二题。。
然后太虚真人告诉我最后一个题目是一个回滚莫队,然后我就想明天再学。
然后就放下了一个题目。。
结果。。。。
这个题目就是那个最后一个题目的原题!!!!
连TM样例都一样!!!!
淦
自己在考场上看出来是莫对算法的题目,然后只会写 \(add\) 函数但是并不会写\(del\),然后手玩了两个小时,之后放弃。。。
然后此题抱零。。
气展了!!!!!!!
这到题目就是一个回滚莫队的板子题目,自己看看网上回滚莫队算法的讲解就行了。
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
#define asm(i,x) for(register signed i=head[x];i;i=edge[i].next)
namespace xin_io
{
#define debug cout<<"debug"<<endl
#define sb(x) cout<<#x" = "<<x<<' '
#define jb(x) cout<<#x" = "<<x<<endl
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
char buf[1<<20],*p1 = buf,*p2 = buf; typedef long long ll; typedef unsigned long long ull;
class xin_stream{public:template<typename type>xin_stream &operator >> (type &s)
{
register bool f = 0; s = 0; register char ch = gc();
while(!isdigit(ch)) f |= ch == '-',ch = gc();
while( isdigit(ch)) s = (s << 1) + (s << 3) + (ch xor 48),ch = gc(); return s = f ? -s : s,*this;
}}io;
}
using namespace xin_io; static const int maxn = 1e6+10;
namespace xin
{
int ans1 = 0,ans2 = 0,top = 0,s1[maxn],s2[maxn],up[maxn],down[maxn],ans[maxn];
class xin_query
{
private:
friend bool operator < (xin_query x,xin_query y)
{return x.bel == y.bel ? x.r < y.r : x.bel < y.bel;}
public:
int l,r,id,bel;
}d[maxn];
int n,m,a[maxn];
inline void add(int x)
{
up[x] = up[x + 1] + 1; down[x] = down[x - 1] + 1;
int temp = up[x] + down[x] - 1;
s1[++top] = x + up[x] - 1; s2[top] = down[s1[top]];
s1[++top] = x - down[x] + 1;s2[top] = up[s1[top]];
down[s1[top-1]] = up[s1[top]] = temp;
ans1 = std::max(ans1,temp);
}
inline short main()
{
io >> n >> m; int kuai = (int)(1.0 * n / std::sqrt(m));
try(i,1,n) io >> a[i];
try(i,1,m) io >> d[i].l >> d[i].r,d[i].id = i,d[i].bel = (d[i].l - 1) / kuai + 1;
// try(i,1,m) sb(d[i].l),sb(d[i].r),jb(d[i].bel);
std::sort(d+1,d+m+1);
int r_pre = 0,ret = 0;
try(i,1,m)
{
if(d[i].bel xor d[i-1].bel)
{
memset(up,0,sizeof(int) * (n + 1)); memset(down,0,sizeof(int) * (n + 1));
ret = r_pre = d[i].bel * kuai; ans2 = 0;
}
top = ans1 = 0;
while(r_pre < d[i].r) add(a[++r_pre]);
top = 0;
ans1 = ans2 = std::max(ans1,ans2);
try(j,d[i].l,std::min(ret,d[i].r)) add(a[j]);
ans[d[i].id] = ans1;
throw(j,top,1)
if(j & 1) down[s1[j]] = s2[j];
else up[s1[j]] = s2[j];
try(j,d[i].l,std::min(ret,d[i].r)) up[a[j]] = down[a[j]] = 0;
}
try(i,1,m) printf("%d\n",ans[i]);
return 0;
}
}
signed main() {return xin::main();}
[考试总结]noip模拟45的更多相关文章
- 2021.8.21考试总结[NOIP模拟45]
T1 打表 由归纳法可以发现其实就是所有情况的总和. $\frac{\sum_{j=1}^{1<<k}(v_j-v_{ans})}{2^k}$ $code:$ 1 #include< ...
- 6.17考试总结(NOIP模拟8)[星际旅行·砍树·超级树·求和]
6.17考试总结(NOIP模拟8) 背景 考得不咋样,有一个非常遗憾的地方:最后一题少取膜了,\(100pts->40pts\),改了这么多年的错还是头一回看见以下的情景... T1星际旅行 前 ...
- 5.23考试总结(NOIP模拟2)
5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...
- 5.22考试总结(NOIP模拟1)
5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...
- noip模拟45[真是啥也不会]
noip模拟45 solutions 真是一个题都不会了,然而考完试之后我在10min之内切掉了最后一个题 话说这是为什么呢, 因为最后一个是回滚莫队的大板子,然而我忘记了,不不不,是没有记起来过 T ...
- 2021.9.17考试总结[NOIP模拟55]
有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...
- [考试总结]noip模拟23
因为考试过多,所以学校的博客就暂时咕掉了,放到家里来写 不过话说,vscode的markdown编辑器还是真的很好用 先把 \(noip\) 模拟 \(23\) 的总结写了吧.. 俗话说:" ...
- [考试反思]NOIP模拟测试19:洗礼
[]260 []230[]210 []200[8]170[9]160 这套题一般,数据很弱,T1T2暴力都能A,而且都是一些思维题,想不到就爆0. 原因不明,很多一直很强的人在这一次滑铁卢了,于是我个 ...
- 「考试」noip模拟9,11,13
9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...
随机推荐
- 几百行代码写个Mybatis,原理搞的透透的!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 Mybatis 最核心的原理也是它最便于使用的体现,为什么这说? 因为我们在使用 M ...
- DC-4靶机
仅供个人娱乐 靶机信息 下载地址:http://www.five86.com/downloads/DC-4.zip 一.主机扫描 arp-scan -l nmap -p 1-65535 -A -sV ...
- 大数据学习(03)——HDFS的高可用
高可用架构图 先上一张搜索来的图. 如上图,HDFS的高可用其实就是NameNode的高可用. 上一篇里,SecondaryNameNode是NameNode单节点部署才会有的角色,它只帮助NameN ...
- CVPR2021 | Transformer用于End-to-End视频实例分割
论文:End-to-End Video Instance Segmentation with Transformers 获取:在CV技术指南后台回复关键字"0005"获取该论文 ...
- dio框架访问云函数参数传递问题(以腾讯云中的云函数为例子)第一部
dd云函数其实比较普及,这里以腾讯云的云函数为例,传递参数完成简单的账号注册. 一.第一步先注册腾讯云账号,这里不过多阐述,接着点击 控制台 进入开发者界面.(注意提前进行实名认证) 二.开发者界面如 ...
- 3D网页小实验-基于多线程和精灵动画实现RTS式单位行为
一.实验目的: 1.在上一篇的"RTS式单位控制"的基础上添加逻辑线程,为每个单位实现ai计算: 2.用精灵动画为单位的行为显示对应的动作效果. 二.运行效果: 1.场景中的单位分 ...
- 聊聊 PC 端自动化最佳方案 - WinAppDriver
1. 前言 大家好,我是安果! 一提到自动化,可能大家想到的是 App 端的 Appium.Airtest.AutoJS,亦或是 Selenium.Puppeteer.Cypress 等 Web 端的 ...
- 密码三次就会锁掉 while 循环
while 只要给定的条件为真,C 语言中的 while 循环语句会重复执行一个目标语句 一般定义 //return_type function_name( parameter list ) //{ ...
- 太细了!阿里十年技术专家联合打造“最新”Jetpack强化实战手册
前言 提到Android架构,我们首先想到的是MVC,MVP,MVVM.他们主要是针对视图和模型的.随着Android的发展,从原来的框架很少,全是自己动手撸.到现在框架越来越多,选型也越来越多,导致 ...
- 可怕!字节跳动大牛爆出的“Android进阶指南”,强到无法形容,GitHub已标星“8.5k”!
前言 从去年8月份开始,我开始重新找工作,在这期间刷了不少面试题和大牛博客,无意中薅到一份字节跳动大牛整理的一份"Android进阶指南",包含Android面试常见问题.主流技术 ...