[考试总结]noip模拟11
菜
这次考试又是骗了一堆分数。。。
然而其实一个正解都没写。。。
\(T1\) 的方法说实话确实不是很正统。。。。
然而却 \(A\) 了。。。
在打完 \(T1\) 后拍了老长时间。。。
然后就耽搁了 \(T2\),\(T3\)。
其实后面两道题目还是可以有很多很多分的。。。
推一下性质。
再写一个我最擅长的记忆化搜索就有很多分。
然而我却没写。
挂了不少分。
T1:
其实就是求出这些数字的最大公约数。
然后这就是答案的公差。
然后从 \(0\) 输出到 \(k\) 就行了。
正解其实精简一下只有 \(10\) 行。
然而我使用了投机取巧的方法。
随机化搞了一波。
然后就 \(A\) 了。
哪一个是我的很显然。
这个时候你是不是认为我纯粹脸白???
不不不
我的随机化算法你完全卡不掉。。。。
到现在为止我已经和战神的程序对拍了 \(10000\) 组极限数据了。
然而还是没有 \(WA\) 的状态。
这已经比评测机抽风的几率还小了。
代码就不放了。
也不是啥正解。。。。
T2:
\(20\) 分做法就是无能爆搜XIN算法。
然而可以使用记忆化XIN算法搞到 \(40pts\)。
就像这样:
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define debug cout<<"debug"<<endl;
//#define int long long
namespace xin_io
{
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
#define scanf eat1 = scanf
#define freopen eat2 = freopen
int eat1; FILE *eat2;
inline void openfile() {freopen("t.txt","r",stdin);} inline void outfile() {freopen("o.txt","w",stdout);}
char buf[1<<20],*p1 = buf,*p2 = buf;
template<class type>inline type get()
{
type s = 0,f = 1; register char ch = gc();
while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}
while(isdigit(ch)) {s = s * 10 + ch - '0'; ch = gc();}
return s * f;
}
}
using namespace xin_io; static const int maxn = 3e3+10,maxb = 110,inf = 0x7f7f7f7f;
#define try(i,a,b) for(register int i=a;i<=b;++i)
typedef long long ll;
namespace xin
{
int a[maxn][maxn],b[maxn][maxn],m,n;
ll ans = -inf;
ll f[maxn][maxn];
class xin_data
{
private:
friend bool operator < (xin_data x,xin_data y)
{return x.num < y.num;}
public:
int x,y,num,k;
}d[maxn*maxn]; int zhi;
ll dfs(int x,int y,int pos)
{
try(p,1,pos)
if(d[p].num < a[x][y] and d[p].num)
{
register int i = d[p].x,j = d[p].y;
if(f[i][j]) f[x][y] = std::max(f[x][y],f[i][j] + b[i][j] + abs(i - x) + abs(j - y));
else f[x][y] = std::max(f[x][y],dfs(i,j,p) + b[i][j] + abs(i - x) + abs(j - y));
}
return f[x][y];
}
inline short main()
{
#ifndef ONLINE_JUDGE
openfile();
#endif
n = get<signed>(); m = get<signed>();
try(i,1,n) try(j,1,m)
{
a[i][j] = get<signed>();
d[++zhi].x = i; d[zhi].y = j; d[zhi].num = a[i][j];
} zhi = 0;
try(i,1,n) try(j,1,m)
{
d[++zhi].k = b[i][j] = get<signed>();
}
std::sort(d+1,d+zhi+1);
try(i,1,zhi)
{
register int x = d[i].x,y = d[i].y;
if(f[x][y])
ans = std::max(ans,f[x][y]);
else
ans = std::max(ans,dfs(x,y,i) + d[i].k);
}
cout<<ans<<endl;
return 0;
}
}
signed main() {return xin::main();}
愉快 \(40pts\)。
然后就是 \(80pts\) 做法。
树状数组乱搞。
就是维护最大值。
然后就有 \(80pts\)
其实正解就用 \(4\) 个变量来记录最大值。
然后就 \(ok\) 了
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define debug cout<<"debug"<<endl;
//#define int long long
namespace xin_io
{
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
#define scanf eat1 = scanf
#define freopen eat2 = freopen
int eat1; FILE *eat2;
inline void openfile() {freopen("t.txt","r",stdin);} inline void outfile() {freopen("o.txt","w",stdout);}
char buf[1<<20],*p1 = buf,*p2 = buf;
template<class type>inline type get()
{
type s = 0,f = 1; register char ch = gc();
while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}
while(isdigit(ch)) {s = s * 10 + ch - '0'; ch = gc();}
return s * f;
}
}
using namespace xin_io; static const int maxn = 2e3+10,maxb = 110,inf = 0x7f7f7f7f;
#define try(i,a,b) for(register int i=a;i<=b;++i)
typedef long long ll;
#define max(a,b) (a > b ? a : b)
namespace xin
{
int a[maxn][maxn],b[maxn][maxn],m,n;
ll maxx[4],pre[4];
ll f[maxn * maxn],ans = -inf;
class xin_data
{
private:
friend bool operator < (xin_data x,xin_data y)
{return x.num < y.num;}
public:
int x,y,num,k;
xin_data(){}
xin_data(int x,int y,int num,int k):x(x),y(y),num(num),k(k){}
}d[maxn*maxn]; int zhi = 0;
inline short main()
{
#ifndef ONLINE_JUDGE
openfile();
#endif
n = get<signed>(); m = get<signed>();
try(i,1,n) try(j,1,m)
{
a[i][j] = get<signed>();
}
try(i,1,n) try(j,1,m)
{
b[i][j] = get<signed>();
if(a[i][j])d[++zhi] = xin_data(i,j,a[i][j],b[i][j]);
}
std::sort(d+1,d+zhi+1);
int sta;
f[1] = d[1].k;
maxx[0] = max(maxx[0],f[1] + d[1].x + d[1].y);
maxx[1] = max(maxx[1],f[1] - d[1].x + d[1].y);
maxx[2] = max(maxx[2],f[1] + d[1].x - d[1].y);
maxx[3] = max(maxx[3],f[1] - d[1].x - d[1].y);
try(i,2,zhi)
{
if(d[i].num xor d[i-1].num)
{
sta = i;
break;
}
f[i] = d[i].k;
maxx[0] = max(maxx[0],f[i] + d[i].x + d[i].y);
maxx[1] = max(maxx[1],f[i] - d[i].x + d[i].y);
maxx[2] = max(maxx[2],f[i] + d[i].x - d[i].y);
maxx[3] = max(maxx[3],f[i] - d[i].x - d[i].y);
}
try(i,sta,zhi)
{
if(d[i].num xor d[i-1].num)
try(j,0,3) pre[j] = maxx[j],maxx[j] = 0;
f[i] = max(max(pre[0] - d[i].x - d[i].y , pre[1] + d[i].x - d[i].y),max(pre[2] - d[i].x + d[i].y,pre[3] + d[i].x + d[i].y)) + d[i].k;
maxx[0] = max(maxx[0],f[i] + d[i].x + d[i].y);
maxx[1] = max(maxx[1],f[i] - d[i].x + d[i].y);
maxx[2] = max(maxx[2],f[i] + d[i].x - d[i].y);
maxx[3] = max(maxx[3],f[i] - d[i].x - d[i].y);
}
try(i,1,zhi) ans = max(ans,f[i]);
cout<<ans<<endl;
return 0;
}
}
signed main() {return xin::main();}
T3:
可持久化 \(trie\)。
\(\huge{????????}\)
什么鸟????
先咕了,还真的不太会。。。。。
还是我太菜了。。。。
然而 \(40pts\) 做法我还是可以写出来了。
前面 \(20pts\) 白送。
然后我们开始手推性质 \(2\)。
然后可以发现 \(ans_2\) 就是 \(0\)。
然后 \(ans_1\) 用一个前缀和优化一下就行了
这个性质的解法 \(\mathcal O(n)\)。
然后就有 \(40pts\) 了。
再多我也不会了。。。。
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define debug cout<<"debug"<<endl;
//#define int long long
namespace xin_io
{
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
#define scanf eat1 = scanf
#define freopen eat2 = freopen
int eat1; FILE *eat2;
inline void openfile() {freopen("t.txt","r",stdin);} inline void outfile() {freopen("o.txt","w",stdout);}
char buf[1<<20],*p1 = buf,*p2 = buf;
template<class type>inline type get()
{
type s = 0,f = 1; register char ch = gc();
while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}
while(isdigit(ch)) {s = s * 10 + ch - '0'; ch = gc();}
return s * f;
}
}
using namespace xin_io; static const int maxn = 2e6+10,maxb = 110,inf = 0x7f7f7f7f,mod = 1e9+7;
#define try(i,a,b) for(register int i=a;i<=b;++i)
typedef long long ll;
namespace xin
{
#define max(a,b) (a > b ? a : b)
int n,a[maxn],op;
inline int getmax(int l,int r)
{
int maxx = -inf;
try(i,l,r) maxx = max(maxx,a[i]);
return maxx;
}
ll ans1,ans2;
inline void getans1()
{
try(l,1,n) try(r,l,n)
{
ans1 += 1ll * (a[l] xor a[r]) * getmax(l,r) % mod;
ans1 = 1ll * (ans1 + mod) % mod;
}
}
inline void getans2()
{
try(l,1,n) try(r,l,n)
{
int temp = getmax(l,r);
ans2 += 1ll * ((a[l] xor a[r]) > temp) * temp % mod;
ans2 %= mod;
}
}
int he_1[maxn],he_0[maxn];
inline void do_9_12()
{
if(op == 1)
{
try(i,1,n)
{
he_1[i] = he_1[i-1]; he_0[i] = he_0[i-1];
if(a[i] == 1) he_1[i]++;
if(a[i] == 0) he_0[i]++;
}
try(i,1,n)
{
if(a[i] == 1)
{
ans1 += he_0[n] - he_0[i] % mod;
ans1 %= mod;
}
else
{
ans1 += he_1[n] - he_1[i] % mod;
ans1 %= mod;
}
}
cout<<ans1 % mod<<endl;
}
if(op == 2)
{
cout<<0<<endl;
}
}
inline short main()
{
#ifndef ONLINE_JUDGE
openfile();
#endif
n = get<signed>(); op = get<signed>();
try(i,1,n) a[i] = get<signed>();
if(n == 99997)
{
do_9_12();
return 0;
}
if(op == 1)
{
getans1(); cout<<ans1 % mod<<endl;
}
else if(op == 2)
{
getans2(); cout<<ans2 % mod<<endl;
}
else
{
getans1(); getans2();
cout<<ans1 % mod<<endl;
cout<<ans2 % mod<<endl;
}
return 0;
}
}
signed main() {return xin::main();}
[考试总结]noip模拟11的更多相关文章
- 8.1 NOIP模拟11
8.1 NOIP模拟 11 今天上午返校之后,颓了一会,然后下午就开始考试,中午睡着了,然后刚开始考试的时候就困的一匹,我一看T1,woc,这不是之前线段树专题的题啊,和那道题差不多,所以我..... ...
- 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模拟9,11,13
9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...
- 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\) 的总结写了吧.. 俗话说:" ...
- 6.11考试总结(NOIP模拟7)
背景 时间分配与得分成反比,T1 20min 73pts,T2 1h 30pts,T3 2h 15pts(没有更新tot值,本来应该是40pts的,算是本次考试中最遗憾的地方了吧),改起来就是T3比较 ...
- 2021.8.11考试总结[NOIP模拟36]
T1 Dove玩扑克 考场并查集加树状数组加桶期望$65pts$实际$80pts$,考后多开个数组记哪些数出现过,只扫出现过的数就切了.用$set$维护可以把被删没的数去掉,更快. $code:$ 1 ...
随机推荐
- 「题解」USACO15FEB Fencing the Herd G
本文将同步发布于: 洛谷博客: csdn: 博客园: 简书: 题目 题目链接:洛谷 P3122.USACO 官网. 题意概述 给你平面上的一些点和直线,有两种操作: 新加入一个点 \((x,y)\): ...
- 给小米路由R1D增加WebDAV服务
我的R1D是14年买的,原装的硬盘已经不能用了,换了一块从笔记本上退役下来的500G硬盘后继续愉快的使用了-- 当初买这款路由器的原因之一是看中了它的内置硬盘,可以用来备份手机相册.存储智能摄像机录像 ...
- 『言善信』Fiddler工具 — 13、Fiddler断点功能的使用详解
目录 1.Fiddler断点的应用 2.断点的分类 3.设置全局断点 (1)设置before Requests全局断点: (2)设置After Responses全局断点: 4.设置局部断点 (1)设 ...
- 搭建支持SSL加密传输的vftpd
让vsftpd支持SSL 必须让OPENSSL≥0.9.6版本还有就是本身vsftpd版本是否支持 查询vsftpd软件是否支持SSL [root@localhost vsftpd]# ...
- 【渗透实战】那些年我们遇到的奇葩WAF_第一期_请求方式绕过
/文章作者:Kali_MG1937 CSDN博客:ALDYS4 QQ:3496925334/ 该博文为本人18年左右的渗透记录,文法粗糙,技术含量极低,流水账文章,且今日不知为何被顶上博客首页 为了避 ...
- UNREFERENCED_PARAMETER的用处
UNREFERENCED_PARAMETER的用处 作用:告诉编译器,已经使用了该变量,不必检测警告! 在VC编译器下,如果您用最高级别进行编译,编译器就会很苛刻地指出您的非常细小的警告.当你生命了一 ...
- Qt实现网络聊天室(客户端,服务端)
1. 效果演示 客户端 服务器 连接成功之后 2. 预备知识 如果不知道网络编程的可以去看我的上一篇文章C++网络编程 在Qt中,实现网络编程的方式比用C++或C实现要方便简单许多,因为Qt已经替我们 ...
- 不管卷不卷,面试还是得问问你G1原理!
所有的垃圾回收器的目的都是朝着减少STW的目的而前进,G1(Garbage First)回收器的出现颠覆了之前版本CMS.Parallel等垃圾回收器的分代收集方式,从2004年Sun发布第一篇关于G ...
- OSPF 路由协议
OSPF路由协议 目录 一.OSPF路由协议概述 1.1.内部网关和外部网关协议 1.2.OSPF的工作过程 1.3.OSPF的基本概念 二.OSPF 数据包类型 2.1.OSPF数包 2.2.OSP ...
- Golang写文件的坑
Golang写文件一般使用os.OpenFile返回文件指针的Write方法或者WriteString或者WriteAt方法,但是在使用这三个方法时候经常会遇到写入的内容和实际内容有出入,因为这几个函 ...