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. ...
随机推荐
- HDU - 6444(单调队列+思维)
链接:HDU - 6444 题意:给出一个包含 n 个数的环,每个数都有一个价值,起点任选,每次跳顺时针跳 k 个数,在哪个数就能获得该价值(包括起点),最多取 m 次,问最少需要补充多少价值,所拿的 ...
- 原生js常用方法
原生JavaScript设置cookie值 function setCookie(name, value, Hours) { var d = new Date(); var offset = 8; v ...
- 原生js实现轮播图原理
轮播图的原理1.图片移动实现原理:利用浮动将所有所有照片依次排成一行,给这一长串图片添加一个父级的遮罩,每次只显示一张图,其余的都隐藏起来.对图片添加绝对定位,通过控制left属性,实现照片的移动. ...
- python基本数据类型——元组
元组 元组是一种不可变的序列,创建后不可以修改元素值 # 创建只包含一个元素的元组 >>a = (3,) >>print(a) (3,) #使用 tuple() 转换为元组 & ...
- (原) MaterialEditor部- UmateriaEditor中 Node编译过程和使用(1)
@author: 白袍小道 转载说明原处 插件同步在GITHUB: DaoZhang_XDZ 最后YY需求(手滑) 1.在理清楚基础套路和细节后,自定义纹理资源,并加入到现有UE材质系统 2. ...
- Dask教程
Dask 介绍 Dask是一款用于分析计算的灵活并行计算库. Dask由两部分组成: 针对计算优化的动态任务调度.这与Airflow,Luigi,Celery或Make类似,但针对交互式计算工作负载进 ...
- 【Linux 运维】Centos7初始化网络配置
设置网络 (1)动态获取一个IP地址 #dhclient 系统自动自动获取一个IP地址#ip addr 查看获取的ip地址(2)查看网关,子网掩码 虚拟机编辑>虚拟 ...
- LintCode-105.复制带随机指针的链表
复制带随机指针的链表 给出一个链表,每个节点包含一个额外增加的随机指针可以指向链表中的任何节点或空的节点. 返回一个深拷贝的链表. 挑战 可否使用O(1)的空间 标签 哈希表 链表 优步 code / ...
- <Android>菜单资源的使用
典型菜单资源结构:<menu>根元素且没有属性,在<menu>根元素里面会嵌套<item>和<group>子元素,<item>里面可以嵌套& ...
- Debian 7 amd64--TP-LINK TL-WN725N 2.0源码驱动编译安装
租房用的是无线网络,在新安装的Debian 7 amd64使用的无线网卡型号是TP-LINK TL-WN725N 2.0,发现驱动安装还是有些问题,折腾了很久,特意在此记录一下. TL-WN725N ...