[考试总结]noip模拟23
因为考试过多,所以学校的博客就暂时咕掉了,放到家里来写
不过话说,vscode的markdown编辑器还是真的很好用
先把 \(noip\) 模拟 \(23\) 的总结写了吧。。
俗话说:“连胜之后必是连败,连败之后必是连胜”。
经过之前连续五场比赛的挂分,终于回来了一点点。。。


菜我还是。。。
咱也不知道当时的零分是怎么考出来的。。。。
\(\color{green}{\huge{\text{菜}}}\)
。。。。。。。。
好吧。。。。。。
每次考爆炸的时候在赛后总会发现自己的题目还是没有审清楚。
然后懊悔好长时间。。。。。
我的语文分数似乎也不是很低啊
所以我在此立下 \(flag\)
以后一个题目不读十遍我就不动键盘。。。
不然想的再快也是浪费时间。。。。
联:
这个题目说白了就是一个线段树的板子题目。。
然而恶心的出题人把范围开到了很大很大。。
但是 \(oj\) 上的题目却是没有截到那个最为重要的信息。
然后很多巨佬就 \(gg\) 了。
惨.jpg
这么大的区间所以一定要进行 离散化
然后开始愉快的线段树。
简简单单。。
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define int long long
#define debug cout<<"debug"<<endl
namespace xin_io
{
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
#define scanf a14 = scanf
char buf[1<<20],*p1 = buf,*p2 = buf; FILE *xinnb1; typedef long long ll; int a14;
void openfile() {xinnb1 = freopen("t.txt","r",stdin);} void outfile() {xinnb1 = freopen("o.txt","w",stdout);}
inline int get()
{
int 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 = 1e6+10,inf = 0x7f7f7f7f7f7f7f;
#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)
namespace xin
{
class xin_query{public:int ty,l,r;}q[maxn];
int m,n;
int a[maxn*10],zhi = 0;
std::map<int,int> lisan;
class xin_segment
{
private:
#define ls(x) (x << 1)
#define rs(x) (x << 1 | 1)
inline void up(int x)
{
// debug;
t[x].s = std::min(t[ls(x)].s,t[rs(x)].s);
if(t[ls(x)].st == t[rs(x)].st) t[x].st = t[ls(x)].st;
else t[x].st = -1;
}
inline void down(int x,int l,int r)
{
if(t[x].debt == -1)return;
register int mid = l + r >> 1;
t[ls(x)].debt = t[rs(x)].debt = t[ls(x)].st = t[rs(x)].st = t[x].debt;
if(!t[ls(x)].st) t[ls(x)].s = l;
else t[ls(x)].s = inf;
if(!t[rs(x)].st)t[rs(x)].s = mid+1;
else t[rs(x)].s = inf;
t[x].debt = -1;
}
public:
class xin_tree
{
public:
int st,s,debt;
}t[maxn];
void build(int x,int l,int r)
{
t[x].s = inf; t[x].debt = -1;
if(l == r){t[x].s = l; return;}
register int mid = l + r >> 1;
build(ls(x),l,mid); build(rs(x),mid+1,r);
up(x);
}
void modify(int x,int l,int r,int ql,int qr,int opt)
{
if(qr < l or r < ql)return;
if(ql <= l and r <= qr and t[x].st != -1)
{
if(opt == 1) t[x].st = t[x].debt = 1;
else if(opt == 2) t[x].st = t[x].debt = 0;
else if(opt == 3) t[x].st ^= 1,t[x].debt = t[x].st;
if(!t[x].st) t[x].s = l; else t[x].s = inf;
return;
}
register int mid = l + r >> 1;
down(x,l,r);
modify(ls(x),l,mid,ql,qr,opt); modify(rs(x),mid+1,r,ql,qr,opt);
up(x);
}
}t;
inline short main()
{
#ifndef ONLINE_JUDGE
openfile();
#endif
m = get();
try(i,1,m)
{
q[i].ty = get(); q[i].l = get(); q[i].r = get();
}
try(i,1,m) a[++zhi] = q[i].l,a[++zhi] = q[i].r, a[++zhi] = q[i].l + 1, a[++zhi] = q[i].r + 1;
a[++zhi] = 1;
// try(i,1,zhi) cout<<a[i]<<endl;
// cout<<"zhi = "<<zhi<<endl;
std::sort(a + 1,a + zhi + 1); n = std::unique(a + 1,a + zhi + 1) - (a + 1);
try(i,1,m)
{
register int pos1 = std::lower_bound(a+1,a+n+1,q[i].r+1) - a,pos2 = std::lower_bound(a+1,a+n+1,q[i].l+1) - a;
lisan[pos1] = q[i].r+1; lisan[pos2] = q[i].l+1;
// cout<<"pos1 = "<<pos1<<" pos2 = "<<pos2<<endl;
register int temp = q[i].l;
q[i].l = std::lower_bound(a+1,a+n+1,q[i].l)-a; lisan[q[i].l] = temp;
temp = q[i].r;
q[i].r = std::lower_bound(a+1,a+n+1,q[i].r)-a; lisan[q[i].r] = temp;
}
lisan[1] = 1; t.build(1,1,n);
try(i,1,m)
{
t.modify(1,1,n,q[i].l,q[i].r,q[i].ty);
printf("%lld\n",lisan[t.t[1].s]);
}
// cout<<"Mem = "<<sizeof(t.t) / (1 << 20)<<" MB"<<endl;
return 0;
}
}
signed main() {return xin::main();}
赛:
这个题目就是一个其实不是很难的贪心。。
我们将这个所有的物品分成四个大类。
这个类别就是两个人 \(a\) 和 \(b\) 都喜欢的。
这个是 \(a\) 单独喜欢的。
这个是 \(b\) 单独喜欢的。
这个是 \(a\) 和 \(b\) 都不喜欢的。
这样一来不重不漏。。。
然后我们设选择 \(1\) 类别的选了 \(x\) 个
然后 \(2\) 和 \(3\) 就是 \(k-x\) 个。
然后再从剩下没选的地方中选择,满足一共正好 \(m\) 个。
然后我们要做的工作就是枚举 \(m\)。
然后每次更新答案。
就这。。
然而考场上就莽了一个 \(XIN\) 队。。
惭愧。
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define int long long
#define debug cout<<"debug"<<endl
namespace xin_io
{
#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; FILE *xinnb1; typedef long long ll;
void openfile() {xinnb1 = freopen("t.txt","r",stdin);} void outfile() {xinnb1 = freopen("o.txt","w",stdout);}
inline int get()
{
int 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 = 1e6+10,inf = 0x7f7f7f7f7f7f7f7f;
#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)
namespace xin
{
int a1[maxn],cnt1,a2[maxn],cnt2,a3[maxn],cnt3,a4[maxn],cnt4;
int he1[maxn],he2[maxn],he3[maxn],he4[maxn];
int n,m,k;
int val[maxn],numa,numb;
bool visa[maxn],visb[maxn];
int lj[maxn],cntl = 0;
inline short main()
{
#ifndef ONLINE_JUDGE
openfile();
#endif
n = get(); m = get(); k = get();
try(i,1,n) val[i] = get();
numa = get();
try(i,1,numa)
{
register int x = get();
visa[x] = 1;
}
numb = get(); bool sp1 = 1;
try(i,1,numb)
{
register int x = get();
visb[x] = 1;
if(visa[x]) sp1 = 0;
}
if(sp1 and 2 * k > m) {cout<<-1<<endl; return 0;}
try(i,1,n)
{
if(visa[i] and visb[i]) a1[++cnt1] = val[i];
else if(visa[i] and !visb[i]) a2[++cnt2] = val[i];
else if(!visa[i] and visb[i]) a3[++cnt3] = val[i];
else a4[++cnt4] = val[i];
}
std::sort(a1+1,a1+cnt1+1); std::sort(a2+1,a2+cnt2+1);
std::sort(a3+1,a3+cnt3+1); std::sort(a4+1,a4+cnt4+1);
try(i,1,cnt1) he1[i] = he1[i-1] + a1[i]; try(i,1,cnt2) he2[i] = he2[i-1] + a2[i];
try(i,1,cnt3) he3[i] = he3[i-1] + a3[i]; try(i,1,cnt4) he4[i] = he4[i-1] + a4[i];
int ans = inf;
register int ms = std::min(k,std::min(m,cnt1));
if(!ms)
{
register int temp = he2[k] + he3[k];
try(i,k+1,cnt2) lj[++cntl] = a2[i]; try(i,k+1,cnt3) lj[++cntl] = a3[i];
try(i,1,cnt4) lj[++cntl] = a4[i];
std::sort(lj+1,lj+cntl+1);
try(i,1,m-2*k) temp += lj[i];
cout<<temp<<endl;
return 0;
}
try(i,0,ms)
{
if((2 * k - i > m) or (k - i) > cnt2 or (k - i) > cnt3) continue;
register int temp = he1[i] + he2[k-i] + he3[k-i],tot = 2 * k - i;
// cout<<"i = "<<i<<" he1[i] = "<<he1[i]<<" he2[i] = "<<he2[i]<<" he3[i] = "<<he3[i]<<endl;
if(tot < m) temp += he4[m - 2 * k + i];
ans = std::min(ans,temp);
}
// if(!ms) debug;
cout<<ans<<endl;
return 0;
}
}
signed main() {return xin::main();}
题:
这个题目实际上还是比较简单。
其实就是我们设定一个集合,之后从后面开始向前枚举这个集合。
然后计算
注意去重
代码非常短
%: pragma GCC optimize("O9")
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define debug cout<<"debug"<<endl
namespace xin_io
{
#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; FILE *xinnb1; typedef long long ll;
void openfile() {xinnb1 = freopen("t.txt","r",stdin);} void outfile() {xinnb1 = freopen("o.txt","w",stdout);}
inline int get()
{
int 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 = 1e3+10,inf = 0x7f7f7f7f;
#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)
namespace xin
{
int f[maxn][maxn],g[maxn*100];
int n,m,u[maxn*100],v[maxn*100],ans;
inline short main()
{
#ifndef ONLINE_JUDGE
openfile();
#endif
n = get(); m = get();
try(i,1,m) u[i] = get(),v[i] = get();
try(i,1,n) f[i][i] = 1,g[i] = 1;
try(j,1,n)
{
throw(i,m,1)
{
register int x = u[i],y = v[i];
if(f[j][x] and f[j][y]) g[j] = 0;
else if(f[j][x]) f[j][y] = 1;
else if(f[j][y]) f[j][x] = 1;
}
}
try(i,1,n)
try(j,i+1,n)
{
if(!g[i] or !g[j]) continue;
bool ok = 1;
try(k,1,n) if(f[i][k] and f[j][k]) {ok = 0; break;}
ans += ok;
}
cout<<ans<<endl;
return 0;
}
}
signed main() {return xin::main();}
[考试总结]noip模拟23的更多相关文章
- 5.23考试总结(NOIP模拟2)
5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...
- noip模拟23[联·赛·题]
\(noip模拟23\;solutions\) 怎么说呢??这个考试考得是非常的惨烈,一共拿了70分,为啥呢 因为我第一题和第三题爆零了,然后第二题拿到了70分,还是贪心的分数 第一题和第二题我调了好 ...
- 6.17考试总结(NOIP模拟8)[星际旅行·砍树·超级树·求和]
6.17考试总结(NOIP模拟8) 背景 考得不咋样,有一个非常遗憾的地方:最后一题少取膜了,\(100pts->40pts\),改了这么多年的错还是头一回看见以下的情景... T1星际旅行 前 ...
- 5.22考试总结(NOIP模拟1)
5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...
- 2021.9.17考试总结[NOIP模拟55]
有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...
- 8.23考试总结(NOIP模拟46)[数数·数树·鼠树·ckw的树]
T1 数数 解题思路 大概是一个签到题的感觉...(但是 pyt 并没有签上) 第一题当然可以找规律,但是咱们还是老老实实搞正解吧... 先从小到大拍个序,这样可以保证 \(a_l<a_r\) ...
- 「考试」noip模拟9,11,13
9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...
- 6.11考试总结(NOIP模拟7)
背景 时间分配与得分成反比,T1 20min 73pts,T2 1h 30pts,T3 2h 15pts(没有更新tot值,本来应该是40pts的,算是本次考试中最遗憾的地方了吧),改起来就是T3比较 ...
- 6.10考试总结(NOIP模拟6)
前言 就这题考的不咋样果然还挺难改的.. T1 辣鸡 前言 我做梦都没想到这题正解是模拟,打模拟赛的时候看错题面以为是\(n\times n\)的矩阵,喜提0pts. 解题思路 氢键的数量计算起来无非 ...
随机推荐
- JMeter执行方式
JMeter执行方式有2种,一种是GUI模式,一种是NO-GUI模式. GUI模式就是界面模式,如下: NO-GUI模式就是命令行模式. 界面模式主要用来编写和调试脚本用的,项目的真正执行最好是采用命 ...
- 【TCP/IP】TCP详解笔记
目录 前言 17. TCP 传输控制协议 17.1 引言 17.2 TCP 服务 17.3 TCP的首部 18. TCP连接的建立与终止 18.1 引言 18.2 连接的建立与终止 18.2.1 建立 ...
- NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」
建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...
- 【C语言】整型在内存中的存储
整型在内存中的存储 1.整型的归类 char short int long 以上都分为有符号(signed)与无符号(unsigned)的类型 2.原码.反码和补码 2.1 定义 计算机在表示一个数字 ...
- js笔记5
1.逻辑运算 || && ! ||:遇到第一个为true的值就中止并返回 &&:遇到第一个为false的值就中止并返回,如果没有false值,就返回最后一个不是fa ...
- 佛祖保佑永无BUG 神兽护体 代码注释(各种版本)
佛祖保佑 永无BUG /* _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. ...
- 12、elk的使用(2)
12.8.收集日志: 因为logstash安装在从节点上,所以这里收集的主要是从节点上的服务日志: 1.收集系统日志: (1)配置文件: vim /etc/logstash/conf.d/system ...
- 16、mysql主从复制问题总结
16.1.主库"show master status"没有结果: 1.原因: 主库binlog功能开关没有改或没有生效: 2.解决办法: (1)[root@backup ~]#eg ...
- [JLOI2011]飞行路线题解
题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的 ...
- AcWing 1277. 维护序列
#include <bits/stdc++.h> #define ll long long #define N 4000010 using namespace std; ll t[N],a ...