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 ...
随机推荐
- ftp: connect: No route to host 解决方案
实验环境: centos7 x2 server-vsftp:192.168.1.32 client:192.168.95 客户端测试访问 ftp服务器 报错:ftp: connect: No rout ...
- linux --stdin 管道 标准输入重定向
linux --stdin 标准输入重定向 --stdin This option is used to indicate that passwd should read the new passwo ...
- 01_Linux基础-部署-VMware-Xshell-Xftp-内核-安迪比尔定理
01_Linux基础-部署-VMware-Xshell-Xftp-内核-安迪比尔定理 博客:https://blog.csdn.net/cpen_web CentOS开源 免费 --- CentOS是 ...
- OpenDataV低代码平台新增组件流程
OpenDataV计划采用子库的方式添加子组件,即每一个组件都当做一个子库,子库有自己的依赖,而项目本身的依赖只针对框架,因此每一个组件我们都当做一个子库来开发.下面我带着大家一步步详细的开发一个数字 ...
- spring native 初体验实现 小米控制美的空调
目前关于 spring native 分享的文章还比较少 写这篇文章的主要目前是分享一下自己写的一个 小米控制美的空调 的程序 集成 spring native 过程中碰到的一些问题和解决方法 先放地 ...
- Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统
前言 Gitea 是一个用于代码托管的轻量级单体程序,它能与现有的经典应用集成,诸如代码分析工具 SonarQube.持续集成工具 Drone.Jenkins 以及用于工单管理的客户端插件(VSCod ...
- 在Ubuntu 主机上使用 Cockpit 管理容器
如果你管理着一台 Linux 服务器,那么你可能正在寻找一个可靠的管理工具.为了这个你可能已经看了 Webmin 和 cPanel 这类软件.但是,如果你正在寻找一种简单的方法来管理还包括了 Dock ...
- while循环控制
基本语法 例(输出五句hello): int i = 1; //循环变量初始化 while(i<=5){ //循环条件 printf("\n hello!"); //循环语句 ...
- salesforce零基础学习(一百一十九)In-App Guidance实现引导页操作功能
本篇参考: https://help.salesforce.com/s/articleView?id=sf.customhelp_lexguid.htm&type=5 https://deve ...
- C#并发编程-1 并发编程概述
一 并发编程简介 1.1 关于并发和并行 并发和并行的概念: 并发:(Concurrent),在某个时间段内,如果有多个任务执行,即有多个线程在操作时,如果系统只有一个CPU,则不能真正同时进行一个以 ...