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. 【git】ignore文件详解

    1.功能 可以指定git,对于某些文件或者文件夹不进行追踪记录,例如一些依赖或者编译中间文件等. 2.使用注意 2.1 对于已经有提交记录的文件 对于已经提交的文件,即使加入了ignore文件也会被g ...

  2. Mac搭建appium环境及python运行代码示例

    Appium主要是通过调用安卓提供的接口来执行命令的,所以需要安装Java和安卓SDK. 1.安装Appium服务端 appium的服务端是基于node的,直接使用npm(node包管理器)安装即可, ...

  3. 力扣166(java)-分数到小数(中等)

    题目: 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 . 如果小数部分为循环小数,则将循环的部分括在括号内. 如果存在多个答案,只需返回 ...

  4. 力扣171(java)-Excel表列序号(简单)

    题目: 给你一个字符串 columnTitle ,表示 Excel 表格中的列名称.返回 该列名称对应的列序号 . 例如: A -> 1B -> 2C -> 3...Z -> ...

  5. Java单元测试技巧之PowerMock

    简介: 高德的技术大佬向老师在谈论方法论时说到:"复杂的问题要简单化,简单的问题要深入化." 这句话让我感触颇深,这何尝不是一套编写代码的方法--把一个复杂逻辑拆分为许多简单逻辑, ...

  6. Scheduled SQL: SLS 大规模日志上的全局分析与调度

    简介: 本文总结了大规模日志全局分析的需求,讨论SLS上现有的典型分析方案,并延伸到 SLS 原生数据处理方案,介绍 Schedueld SQL 功能与最佳实践. 大规模日志全局分析的需求 数据大规模 ...

  7. [PHP] Laravel 获取模型/表的所有字段

      获取指定表的所有字段名: use Illuminate\Support\Facades\Schema; // 表名不带前缀 $columns = Schema::getColumnListing( ...

  8. [Mobi] MacOS 安装设置 ADB (Android Dedug Bridge)

    adb (Android Dedug Bridge) 是 Google 提供的一个工具,用于调试 Android 应用程序和系统的各个部分. 在 MacOS 平台,调试安卓应用 首先需要安装 Andr ...

  9. 2021“MINIEYE杯”中国大学生算法设计超级联赛(1)

    2021"MINIEYE杯"中国大学生算法设计超级联赛(1) 1001 Mod, Or and Everything 题意: 对于每次输入的数字n,求(n%1)|...(n%n)的 ...

  10. Solution Set - 贪心和数据结构

    感觉自己好菜啊,这个专题真的不太会. CF1439C Greedy Shopping Link&Submission. 容易发现,当此人连续买了一段物品之后,他的钱数至少减半.所以他最多只会买 ...