X day1
题目pdf
官方题解
T1:
我们可以发现此题若要求$[L,R]$区间的答案,其实就是再求前缀和,我们设$b$为当前出现次数最多的字符,$c$为最小,所以答案为$s[b]_r-s[c]_r-(s[b]_{l-1}-s[c]_{l-1})$,其实我们可以用一个数组$minv[b][c]$记录这个式子$s[b]_{l-1}-s[c]_{l-1}$的最小值。记$pos[b][c]$表示当出现此刻的位置,然后当我们确定一个位置$pos$时,我们假设它是出现次数最多的字符,然后枚举其他$25$个字母,其实不需要找出现次数最小,因为答案会维护最大
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
inline int read(){
int f=,ans=;char c;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
return f*ans;
}
int n,s[],pos[][],last[],ans,minv[][];
char str[];
int main(){
n=read();
scanf("%s",str+);
for(int i=;i<=n;i++){
int c=str[i]-'a';
s[c]++;
last[c]=i;
for(int j=;j<;j++){
if(c!=j&&s[j]!=){
if(last[j]==pos[c][j]) ans=max(ans,s[c]-s[j]-minv[c][j]-);
else ans=max(ans,s[c]-s[j]-minv[c][j]);
if(last[j]==pos[j][c]) ans=max(ans,s[j]-s[c]-minv[j][c]-);
else ans=max(ans,s[j]-s[c]-minv[j][c]);
}
}
for(int j=;j<;j++){
if(s[j]-s[c]<minv[j][c]) minv[j][c]=s[j]-s[c],pos[j][c]=i;
if(s[c]-s[j]<minv[c][j]) minv[c][j]=s[c]-s[j],pos[c][j]=i;
}
}
cout<<ans<<endl;
}
T2:计算几何,过于高深
T3:
代码能力题,$3 \times 3$的网格想到什么,搜索。然后用并查集去查看此时是否正确。码了我$1$个半小时
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#include<algorithm>
#include<ctime>
using namespace std;
inline int read(){
int f=,ans=;char c;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
return f*ans;
}
int f[];
int find(int x){if(f[x]==x) return x;return f[x]=find(f[x]);}
int merge(int x,int y){int t1=find(x),t2=find(y);f[t2]=t1;}
struct node{
int a[][][];
int ans;
bool ff[][];
}x;
int query(int i,int j,int fw){
if(fw==) return (i-)*+(j-)*+;
if(fw==) return (i-)*+(j-)*+;
if(fw==) return (i-)*+(j-)*+;
if(fw==) return (i-)*+(j-)*+;
}
bool check(node st){
for(int i=;i<=;i++) f[i]=i;
for(int i=;i<=;i++){
for(int j=;j<=;j++){
if(i->=&&st.a[i][j][]==st.a[i-][j][]) merge(query(i,j,),query(i-,j,));
if(i+<=&&st.a[i][j][]==st.a[i+][j][]) merge(query(i,j,),query(i+,j,));
if(j->=&&st.a[i][j][]==st.a[i][j-][]) merge(query(i,j,),query(i,j-,));
if(j+<=&&st.a[i][j][]==st.a[i][j+][]) merge(query(i,j,),query(i,j+,));
}
}
for(int i=;i<=;i++){
for(int j=;j<=;j++){
if(st.a[i][j][]==st.a[i][j][]) merge(query(i,j,),query(i,j,));
if(st.a[i][j][]==st.a[i][j][]) merge(query(i,j,),query(i,j,));
if(st.a[i][j][]==st.a[i][j][]) merge(query(i,j,),query(i,j,));
if(st.a[i][j][]==st.a[i][j][]) merge(query(i,j,),query(i,j,));
}
}
int t1=-,t2=-,t3=-,t4=-;
for(int i=;i<=;i++){
for(int j=;j<=;j++){
for(int kk=;kk<=;kk++){
if(st.a[i][j][kk]==&&t1==-) t1=find(f[query(i,j,kk)]);
if(st.a[i][j][kk]==&&t2==-) t2=find(f[query(i,j,kk)]);
if(st.a[i][j][kk]==&&t3==-) t3=find(f[query(i,j,kk)]);
if(st.a[i][j][kk]==&&t4==-) t4=find(f[query(i,j,kk)]);
} }
}
for(int i=;i<=;i++){
for(int j=;j<=;j++){
for(int kk=;kk<=;kk++){
if(st.a[i][j][kk]==&&find(f[(query(i,j,kk))])!=t1) return false;
if(st.a[i][j][kk]==&&find(f[(query(i,j,kk))])!=t2) return false;
if(st.a[i][j][kk]==&&find(f[(query(i,j,kk))])!=t3) return false;
if(st.a[i][j][kk]==&&find(f[(query(i,j,kk))])!=t4) return false;
} }
}return true;
}
char str[];
int hash(char w){
if(w=='R') return ;
if(w=='G') return ;
if(w=='B') return ;
if(w=='O') return ;
}
queue<node> que;
int main(){
srand(time());
for(int i=;i<=;i++){
for(int j=;j<=;j++){
cin>>str;
for(int k=;k<;k++){
if(k!=) x.a[i][j][k+]=hash(str[k]);
else x.ff[i][j]=(str[k]-'')^;
}
}
}
if(x.a[][][]==&&x.a[][][]==&&x.a[][][]==&&x.a[][][]==){cout<<;return ;}
x.ans=;
que.push(x);
while(!que.empty()){
node xx=que.front();que.pop();
if(check(xx)){
cout<<xx.ans;
return ;
}
for(int kk=;kk<=;kk++){
if(xx.ff[kk][]&&xx.ff[kk][]&&xx.ff[kk][]){
node p=xx;
for(int i=;i<=;i++){
int pos=i+;
if(pos==) pos=;
for(int j=;j<=;j++) p.a[kk][i][j]=xx.a[kk][pos][j];
}
p.ans=xx.ans+;
que.push(p);
p=xx;
for(int i=;i<=;i++){
int pos=i-;
if(pos==) pos=;
for(int j=;j<=;j++) p.a[kk][i][j]=xx.a[kk][pos][j];
}
p.ans=xx.ans+;
que.push(p);
}
}
for(int kk=;kk<=;kk++){
if(xx.ff[][kk]&&xx.ff[][kk]&&xx.ff[][kk]){
node p=xx;
for(int i=;i<=;i++){
int pos=i+;
if(pos==) pos=;
for(int j=;j<=;j++) p.a[i][kk][j]=xx.a[pos][kk][j];
}
p.ans=xx.ans+;
que.push(p);
p=xx;
for(int i=;i<=;i++){
int pos=i-;
if(pos==) pos=;
for(int j=;j<=;j++) p.a[i][kk][j]=xx.a[pos][kk][j]; }
p.ans=xx.ans+;
que.push(p);
}
}
}
}
X day1的更多相关文章
- NOIp2016 Day1&Day2 解题报告
Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...
- day1
day1.py ][][: ][: ): : ]['lock'] = 0 json.dump(userlist_message, open(userlist, 'w')) break #输错次数到3次 ...
- day1作业--登录入口
作业概述: 编写一个登录入口,实现如下功能: (1)输入用户名和密码 (2)认证成功后显示欢迎信息 (3)输错三次后锁定 流程图: readme: 1.程序配置文件: 黑名单文件blacklist.t ...
- luogu1003铺地毯[noip2011 提高组 Day1 T1]
题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...
- Python学习路程day1
变量起名: 变量名如果太长,推荐使用下划线来分开,让人看得清晰明白.例:nums_of_alex_girl=19 .或者是驼峰写法,即首字母大写.例:NumOfAlexGf=18 注意:不合法的变量起 ...
- 团队项目——站立会议 DAY1
团队项目--站立会议 DAY1 团队成员介绍(5人):张靖颜.何玥.钟灵毓秀.赵莹.王梓萱 今日(2016/5/6)为站立会议的第一天,一起对团队项目进行讨论,并对每个人的 ...
- Day1 login
使用流程: 1.程序启动后,显示欢迎信息,提示用户输入用户名: 2.判断用户是否存在,不存在则提示重新输入,或者关闭程序:客户存在则提示客户输入密码: 3.判断密码是否正确,如果不正确则提示用户重新输 ...
- contesthunter CH Round #64 - MFOI杯水题欢乐赛day1 solve
http://www.contesthunter.org/contest/CH Round %2364 - MFOI杯水题欢乐赛 day1/Solve Solve CH Round #64 - MFO ...
- noip2011提高组day1+day2解题报告
Day1 T1铺地毯https://www.luogu.org/problem/show?pid=1003 [题目分析] 全部读入以后从最后一个往前找,找到一个矩形的范围覆盖了这个点,那这个矩形就是最 ...
- 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中
题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...
随机推荐
- Java开发工程师(Web方向) - 03.数据库开发 - 期末考试
期末考试 编程题 本编程题包含4个小题,覆盖知识点从基础的JDBC.连接池到MyBatis. 1(10分) 有一款在线教育产品“天天向上”主要实现了在手机上查看课程表的功能.该产品的后端系统有一张保存 ...
- Consul 简介
Consul包含很多组件,总体来数,Consul是一种服务发现和配置工具. 服务发现:一个客户端提供自己的服务,例如api服务,或者mysql服务,另一个客户端就可以利用Consul通过DNS或者ht ...
- 数据库Mysql的学习(四)-表的记录操作
,);//指定插入的顺序 ,);//按照默认的插入 ,),(,)(,);//同时插入多条数据 //将查询结果插入表中 CREATE TABLE TEXT( category_id INT PRIMAR ...
- 通过流的方式操作hadoop的API
通过流的方式操作hadoop的API 功能: 可以直接用来操作hadoop的文件系统 可以用在mapreduce的outputformat中设置RecordWrite 参考: 概念理解 http:// ...
- Python版本切换和Pip安装
Python版本切换 现在常用的linux系统中都会默认携带python运行环境,在ubuntu 16.04 和centos 7.3中携带有Python 2.7 和Python3.5两个版本, 默认使 ...
- BZOJ 3924 ZJOI2015 幻想乡战略游戏 树链剖分
题目链接:https://www.luogu.org/problemnew/show/P3345(bzoj权限题) 题意概述:动态维护树的上所有点到这棵树的带权重心的距离和.N,Q<=10000 ...
- 常用实例:js格式化手机号为3 4 4形式
如何在填写手机号时将格式转换为3 4 4形式: 一:填写手机号时,在keyup事件中判断长度,符合条件时在值后面插入空格 $('#username').on('keyup',function(e){ ...
- catalan卡塔兰数
令h(0)=1,h(1)=1,卡塔兰数数满足递归式:h(n)= h(0)*h(n-1) + h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2),这是n阶递推关系;还可 ...
- Martin Fowler关于IOC和DI的文章(原版)
Inversion of Control Containers and the Dependency Injection pattern In the Java community there's b ...
- lintcode-160-寻找旋转排序数组中的最小值 II
160-寻找旋转排序数组中的最小值 II 假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2). 你需要找到其中最小的元素. 数组中可能存在 ...