Programiranje 方法记录
[COCI2017-2018#3] Programiranje
题面翻译
题目描述
Little Leticija正在准备编程考试。虽然她已经解决了很多任务,但还有一个任务尚未解决,所以她正在向你寻求帮助。您将获得单词S和Q查询。在每个查询中,给出正整数A,B,C和D.假设单词X由单词S中位置A和B之间的字母组成,而单词S中位置C和D之间的字母组成单词Y.如果可以以某种方式重新排列单词Y中的字母并获得单词X,则必须回答。
输入输出格式
** 输入格式:**
第一行输入包含单词S(1≤| S |≤50000)。| S | 表示单词S中的字符数,由英文字母的小写字母组成。第二行输入包含正整数Q(1≤Q≤50000)。
以下Q行中的每一行包含来自任务的四个整数A,B,C i D(1≤A≤B≤| S |且1≤C≤D≤| S |)。
** 输出格式:**
对于每个查询,如果可能,输出“DA”(克罗地亚语为yes),如果不可能,则输出“NE”(克罗地亚语为否)。
输入输出样例
**输入样例#1: **
kileanimal
2
2 2 7 7
1 4 6 7
**输出样例#1: **
DA
NE
输入样例#2:
abababba
2
3 5 1 3
1 2 7 8
**输出样例#2: **
DA
DA
输入样例#3:
vodevovode
2
5 8 3 6
2 5 3 6
**输出样例#3: **
NE
DA
说明
在总分为50%的测试用例中,它将保持:1≤| S | ≤1000且1≤Q≤1000。
澄清第三个测试用例:
在第一个查询中,X =“vovo”,Y =“devo”。在第二个查询中,X =“odev”,Y =“devo”。
题目描述
Little Leticija is preparing for a programming exam. Even though she has solved a lot of tasks, there’s one still left unsolved, so she is asking you for help. You are given the word S and Q queries. In each query, you are given positive integers A, B, C and D. Let’s say that word X consists of letters between positions A and B in word S, and word Y from letters between positions C and D in word S. For each query, you must answer if it is possible to somehow rearrange the letters in word Y and obtain word X.
输入格式
The first line of input contains the word S (1 ≤ |S| ≤ 50 000). |S| denotes the number of characters in word S, which consists of lowercase letters of the English alphabet. The second line of input contains the positive integer Q (1 ≤ Q ≤ 50 000).
Each of the following Q lines contains four integers A, B, C i D (1 ≤ A ≤ B ≤ |S| and 1 ≤ C ≤ D ≤ |S| ) from the task.
输出格式
For each query, output “DA” (Croatian for yes) if it is possible, and “NE” (Croatian for no) if it is not.
样例 #1
样例输入 #1
kileanimal
2
2 2 7 7
1 4 6 7
样例输出 #1
DA
NE
样例 #2
样例输入 #2
abababba
2
3 5 1 3
1 2 7 8
样例输出 #2
DA
DA
样例 #3
样例输入 #3
vodevovode
2
5 8 3 6
2 5 3 6
样例输出 #3
NE
DA
提示
In test cases worth 50% of total points, it will hold: 1 ≤ |S| ≤ 1000 and 1 ≤ Q ≤ 1000.
Clarification of the third test case:
In the first query, X=”vovo”, and Y=”devo”. In the second query, X=”odev”, and Y=”devo”.
审题
题意转化:“单词\(X\)能以某种方式重新排列得到单词\(Y\)”,其实就是两个单词中的元素相同,即每种字母出现的次数分别相同。又一看询问,“区间查询”,于是我们想到用统计每一个字母出现次数的前缀和,再用前缀和离线地比较每种字母出现的次数。
具体地,我们用二维数组\(pre[i][j]\)来记录从第\(1\)位到第\(i\)位,字母\(j\)出现的次数。(方便起见,直接用字母的\(ascii\)码值表示字母)
比如,\(pre[5][97]=2\)就是指从第\(1\)位到第\(5\)位,字母\(a\)出现了两次。
从而,对于每一个询问,我们只需要比较每种字母出现次数是否相等即可。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=50005;
int pre[N][30];
char s[N];
int q,len;
int main()
{
scanf("%s",s+1);
len=strlen(s+1);
for(int i=1;i<=len;i++)
{
for(int j=1;j<=26;j++) pre[i][j]+=pre[i-1][j];//分别记录每种字母出现次数的前缀和
pre[i][s[i]-'a'+1]++;//当前位对应字母累加
}
scanf("%d",&q);
while(q--)
{
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
if(b-a!=d-c)//如果两个单词的长度不相等,就肯定NE
{
puts("NE");
continue;
}
bool flag=1;
for(int i=1;i<=26;i++)
{
int tmp1=pre[b][i]-pre[a-1][i];//a~b第i个字母出现次数
int tmp2=pre[d][i]-pre[c-1][i];//c~d第i个字母出现次数
if(tmp1!=tmp2)//若某个字母出现次数不相等,则直接判NE
{
flag=0;
break;
}
}
if(flag) puts("DA");
else puts("NE");
}
return 0;
}
Programiranje 方法记录的更多相关文章
- EF里查看/修改实体的当前值、原始值和数据库值以及重写SaveChanges方法记录实体状态
本文目录 查看实体当前.原始和数据库值:DbEntityEntry 查看实体的某个属性值:GetValue<TValue>方法 拷贝DbPropertyValues到实体:ToObject ...
- 64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录
64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录 经过几天不停的网上找资料,实验,终于联通了. 环境:系统:win 2008 ,SqlServer2008 R2, 连接O ...
- js实用方法记录-js动态加载css、js脚本文件
js实用方法记录-动态加载css/js 附送一个加载iframe,h5打开app代码 1. 动态加载js文件到head标签并执行回调 方法调用:dynamicLoadJs('http://www.yi ...
- js实用方法记录-简单cookie操作
js实用方法记录-简单cookie操作 设置cookie:setCookie(名称,值,保存时间,保存域); 获取cookie:setCookie(名称); 移除cookie:setCookie(名称 ...
- js实用方法记录-指不定哪天就会用到的js方法
js实用方法记录-指不定哪天就会用到的js方法 常用或者不常用都有 判断是否在微信浏览器中 测试代码:isWeiXin()==false /** * 是否在微信中 */ function isWeix ...
- Java给各个方法记录执行时间
Java给各个方法记录执行时间 long startTime = System.currentTimeMillis();...//要测试时间的方法LoggerFactory.getLogger(Bas ...
- make menuconfig error 解决方法记录
新建的一个虚拟机,发现make menuconfig 后会出错,查了一下是缺少一些库. 这个错误已经错了两次了,我不希望第三次出现了还想不起来,所以特此记录. # 错误信息: make[2]: *** ...
- 简单一键CENTOS6 安装PPTP VPN方法记录
申明:我们使用PPTP VPN仅仅只能用在查阅资料等正规渠道,不要用在不良用途上.方法收集于网上,这里我用在搬瓦工VPS(VPS方案直达),采用的是CENTOS6 64位系统.我们需要预先将VPS服务 ...
- ASP.NET页面优化性能提升方法记录
今天与大家分享:一种优化页面执行速度的方法.采用这个方法,可以使用页面的执行速度获得[8倍]的提升效果. 为了让您对优化的效果有个直观的了解,我准备了下面的测试结果截图: 测试环境:1. Window ...
随机推荐
- Mybatis介绍、使用IDEA快速入门
1. Mybatis概念 MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发 JavaEE三层架构:表现层.业务层.持久层 JDBC 与 MyBatis 对比: MyBatis 本是 A ...
- hotspot算法实现 <<深入理解Java虚拟机>>
1.枚举根节点 解决何时枚举,不需要实时的枚举,oopMap数据结构对象存储枚举信息 对象引用发生变化,需要存储每一条指令到OOPMap吗,,几百M的对象耗时需要很大的内存.GC空间成本 2.安全点: ...
- 有意思的方向裁切 overflow: clip
本文将介绍一个新特性,从 Chrome 90 开始,overflow 新增的一个新特性 -- overflow: clip,使用它,轻松的对溢出方向进行控制. overflow: clip 为何 首先 ...
- React的生命周期函数
概述 在React中,生命周期函数指的是组件在某一个时刻会自动执行的函数 constructor 在类或组件创建的时候被自动执行,我们可以说它是生命周期函数,但它并不是React所特有的,所有的Es6 ...
- ubuntu安装BricsCAD
目录 目录 下载软件包 安装deb软件包 sudo dpkg -i *.deb 将Crack/bricsys.lic中hostid= <YOURHOSTID>替代本机MAC地址(中间不要冒 ...
- 【Android 逆向】ARM while 逆向
#include <stdio.h> int dowhile(int n){ int i = 1; int s = 0; do{ s += i; }while(i++ < n); r ...
- logstash接受checkpoint防火墙日志并用ruby分词
直接上logstahs配置文件 input{ syslog{ type => "syslog" port => 514 } } filter { grok { matc ...
- 【SQLServer】max worker threads参数说明
本文介绍如何使用SQL Server Management Studio或Transact-SQL在SQL Server中配置最大工作线程服务器配置选项. max worker threads选项配置 ...
- Windows 10 20H1 2004新功能
Windows 10的年度更新版本20H1即将问世.目前可以从insider preview渠道中获得.这个版本中看上去对搜索功能做了不小的改进.包括搜索的磁盘占用率以及搜索的一些展示方式. 其它的一 ...
- 【项目实战】CNN手写识别复杂模型的构造
感谢视频教程:https://www.bilibili.com/video/BV1Y7411d7Ys?p=11 这里开一篇新博客不仅仅是因为教程视频单独出了1p,也是因为这是一种代码编写的套路,特在此 ...