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. ...
随机推荐
- 【CentOS】下安装RabbitMQ教程
系统版本: 安装依赖: 由于RabbitMQ依赖Erlang, 所以需要先安装Erlang. Erlang的安装方式大概有两种: (1) Erlang Solution安装(推荐) wget http ...
- List和String数组相互转化
在工作中经常会遇到需要String[] 参数的地方,我们可以先定义一个list,再转成String[] 来使用,使用list的好处自然是可以随时方便的添加删除元素,下面是方法: List list = ...
- matlab画图:设置y轴位置,使y轴在x轴的中间
sigmoid函数图像 x=-10:0.1:10; y=sigmf(x,[1 0]); plot(x,y) 画出的图像如下所示: 怎么将Y轴放在中间呢,而不是在左边? 即如何得到这种效果呢? 方法 ...
- parity注记词和地址
remix skilled curled cobweb tactics koala bartender precinct energize exes ridden cohesive 0x00EeC52 ...
- JS验证验证服务器控件
JS验证验证服务器控件 <script language="javascript" type="text/javascript"> /******* ...
- MyBatis中文文档
http://mybatis.github.io/mybatis-3/zh/index.html
- hive创建外部表
Create [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] ...
- NFS服务搭建使用
需求:由于线上业务有一些数据存在了Redis数据库和mysql数据库中了,导致了数据较大迁移起来比较麻烦,所以准备搭建NFS来做WEB的共享磁盘,存储这些数据. 服务端搭建: 查看本机关于nfs的包 ...
- 浏览器中event.srcElement和event.target的兼容性问题
在IE下,event对象有srcElement属性,但是没有target属性:Firefox下,even对象有target属性,但是没有srcElement属性.. 解决方法:使用obj(obj = ...
- lintcode-170-旋转链表
170-旋转链表 给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数 样例 给出链表1->2->3->4->5->null和k=2 返回4-> ...