T1 语言

解题思路

模拟即可,对于一个合法的句子直接判断每一个前缀和每一个后缀是否是合法的名词词组。

然后枚举动词的位置判断前后两段是否合法就好了。

code

#include<bits/stdc++.h>
#define int long long
#define ull unsigend long long
#define f() cout<<"Failed"<<endl
using namespace std;
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();};
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x*f;
}
const int N=1e5+10;
int T,n,s[30];
char ch[N];
bool can1[N],can2[N];
inline bool juda(int x){return x&1;}
inline bool judn(int x){return x&2;}
inline bool judv(int x){return x&4;}
void solve()
{
for(int i=0;i<26;i++) s[i]=read();
scanf("%s",ch+1); n=strlen(ch+1);
for(int i=1;i<=n;i++) can1[i]=can2[i]=false;
for(int i=1;i<=n;i++)
if(!juda(s[ch[i]-'a'])&&!judn(s[ch[i]-'a'])) break;
else if(judn(s[ch[i]-'a'])) can1[i]=true;
if(judn(s[ch[n]-'a']))
for(int i=n;i>=1;i--)
if(!juda(s[ch[i]-'a'])&&!judn(s[ch[i]-'a'])) break;
else can2[i]=true;
for(int i=2;i<n;i++)
if(judv(s[ch[i]-'a'])&&can1[i-1]&&can2[i+1])
return printf("Yes\n"),void();
printf("No\n");
}
#undef int
int main()
{
#define int long long
freopen("language.in","r",stdin); freopen("language.out","w",stdout);
T=read(); while(T--) solve();
return 0;
}

T2 色球

解题思路

复杂度可以达到 \(\mathcal{O}(n)\) 用链表实现标记是否反转即可。。

当然我比较懒,暴力做法+双端队列启发式合并复杂度就是 \(\mathcal{O}{nlogn}\) 的了。

code

#include<bits/stdc++.h>
#define int long long
#define ull unsigend long long
#define f() cout<<"Failed"<<endl
using namespace std;
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();};
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x*f;
}
const int N=2e5+10;
int n,m,id[N],rev[N];
deque<pair<int,int> > q[N];//col,sum
char opt[10];
inline void insert_front(int sum,int col,int x)
{
if(!q[x].size()) q[x].push_back(make_pair(col,sum));
else if(q[x].back().first==col){sum+=q[x].back().second;q[x].pop_back();q[x].push_back(make_pair(col,sum));}
else q[x].push_back(make_pair(col,sum));
}
inline void insert_back(int sum,int col,int x)
{
if(!q[x].size()) q[x].push_front(make_pair(col,sum));
else if(q[x].back().first==col){sum+=q[x].front().second;q[x].pop_front();q[x].push_front(make_pair(col,sum));}
else q[x].push_front(make_pair(col,sum));
}
inline void insert(int sum,int col,int x)
{
if(!rev[x]) insert_front(sum,col,x);
else insert_back(sum,col,x);
}
inline void move_front(int x,int y)
{
for(int sum=0;sum<y;)
{
pair<int,int> temp=q[x].back(); q[x].pop_back();
if(temp.second<y-sum){sum+=temp.second;continue;}
temp.second-=y-sum; q[x].push_back(temp);
return printf("%lld\n",temp.first),void();
}
}
inline void move_back(int x,int y)
{
for(int sum=0;sum<y;)
{
pair<int,int> temp=q[x].front(); q[x].pop_front();
if(temp.second<y-sum){sum+=temp.second;continue;}
temp.second-=y-sum; q[x].push_front(temp);
return printf("%lld\n",temp.first),void();
}
}
inline void move(int x,int y)
{
if(!rev[x]) move_front(x,y);
else move_back(x,y);
}
inline void merge_work(int x,int y)
{
if(!rev[x]) while(!q[x].empty()) insert(q[x].back().second,q[x].back().first,y),q[x].pop_back();
else while(!q[x].empty()) insert(q[x].front().second,q[x].front().first,y),q[x].pop_front();
}
inline void merge(int &x,int &y)
{
if(q[x].size()<q[y].size()) merge_work(x,y);
else merge_work(y,x),swap(x,y),rev[y]^=1;
}
#undef int
int main()
{
#define int long long
freopen("color.in","r",stdin); freopen("color.out","w",stdout);
n=read(); m=read();
for(int i=1;i<=n;i++) id[i]=i;
while(m--)
{
int x,y,z; scanf("%s",opt+1); x=read(); y=read();
if(strlen(opt+1)==4) z=read(),insert(x,y,id[z]);
else if(opt[2]=='o') move(id[y],x);
else merge(id[x],id[y]);
}
return 0;
}

T3 斐波

大坑未补

T4 偶数

KMP 求最长 boder 可以得到 40pts (code)

大坑未补

NOIP模拟81的更多相关文章

  1. Noip模拟81 2021.10.20

    T1 语言 比较简单的题,然后就瞎写了,所以考场上就我一个写了线段树的,所以我的常数.... 所以就枚举动词的位置,找前面后面有没有出现$4$即可 1 #include<bits/stdc++. ...

  2. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  3. 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组

    2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...

  4. NOIP 模拟4 T2

    本题属于二和一问题 子问题相互对称 考虑对于问题一:知a求b 那么根据b数组定义式 显然能发现问题在于如何求dis(最短路) 有很多算法可供选择 dijsktra,floyed,bfs/dfs,spf ...

  5. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  6. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  7. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  8. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  9. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  10. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

随机推荐

  1. sql 语句系列(行与列处理)[八百章之第一章]

    排序时对null进行处理 比如说: select * from EMP order by COMM 我需要对红框部分进行desc处理,也就是从大到小排列. 解析: 重点是如何让null独立出去. se ...

  2. Pytorch-tensor的转置,运算

    1.矩阵的转置 方法:t() a=torch.randint(1,10,[2,3]) print(a,'\n') print(a.t()) 输出结果 tensor([[2, 8, 2], [9, 2, ...

  3. 力扣69(java&python)-x的平方根(简单)

    题目: 给你一个非负整数 x ,计算并返回 x 的 算术平方根 . 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 . 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0. ...

  4. 【pytorch学习】之概率

    6 概率 简单地说,机器学习就是做出预测.根据病人的临床病史,我们可能想预测他们在下一年心脏病发作的概率.在飞机喷气发动机的异常检测中,我们想要评估一组发动机读数为正常运行情况的概率有多大.在强化学习 ...

  5. 兑现 Service Mesh 的新价值:精确控制“爆炸半径”

    ​简介:本文分享了阿里云内部所沉淀的全链路流量打标与路由的能力,做出服务网格技术新体验的同时,很好地兑现了服务网格的新价值. 作者:至简 软件是以持续迭代的方式去不断演进的.某种程度上,我们并不担心软 ...

  6. 阿里云张振尧:阿里云边缘云驱动5G时代行业新价值

    ​简介:近日,以"5G融合通信趋势下的技术创新"为主题的2021中国增值电信及虚拟运营高峰论坛在北京召开,阿里云边缘云高级产品专家张振尧发表了<阿里云边缘云驱动5G时代行业新 ...

  7. [FAQ] VsCode 同时多行编辑

      [多光标自定义编辑] 按住 alt 键,鼠标左键点击,出现多个光标. [批量选中匹配编辑] 鼠标选中字符,按快捷键 ctrl + shift + L,字符的右侧都出现光标,可同时编辑. Tool: ...

  8. [FAQ] JS 实现暂停(睡眠) Sleep 与 倒计时 ?

    想要暂停/睡眠一秒,可以参考使用以下方式: async () => { await (new Promise((resolve) => setTimeout(resolve, 1000)) ...

  9. dotnet 读 WPF 源代码笔记 为什么自定义的 UserControl 用户控件不能跨程序集继承

    从设计上,用户控件 UserControl 就不是一个合适用来多次继承的类型,更不要说进行跨程序集继承自定义的 UserControl 用户控件.对于大部分的用户控件来说,都是采用组合现有的控件来实现 ...

  10. 深入理解Python协程:从基础到实战

    title: 深入理解Python协程:从基础到实战 date: 2024/4/27 16:48:43 updated: 2024/4/27 16:48:43 categories: 后端开发 tag ...