题目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的更多相关文章

  1. NOIp2016 Day1&Day2 解题报告

    Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...

  2. day1

    day1.py ][][: ][: ): : ]['lock'] = 0 json.dump(userlist_message, open(userlist, 'w')) break #输错次数到3次 ...

  3. day1作业--登录入口

    作业概述: 编写一个登录入口,实现如下功能: (1)输入用户名和密码 (2)认证成功后显示欢迎信息 (3)输错三次后锁定 流程图: readme: 1.程序配置文件: 黑名单文件blacklist.t ...

  4. luogu1003铺地毯[noip2011 提高组 Day1 T1]

    题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...

  5. Python学习路程day1

    变量起名: 变量名如果太长,推荐使用下划线来分开,让人看得清晰明白.例:nums_of_alex_girl=19 .或者是驼峰写法,即首字母大写.例:NumOfAlexGf=18 注意:不合法的变量起 ...

  6. 团队项目——站立会议 DAY1

    团队项目--站立会议 DAY1        团队成员介绍(5人):张靖颜.何玥.钟灵毓秀.赵莹.王梓萱        今日(2016/5/6)为站立会议的第一天,一起对团队项目进行讨论,并对每个人的 ...

  7. Day1 login

    使用流程: 1.程序启动后,显示欢迎信息,提示用户输入用户名: 2.判断用户是否存在,不存在则提示重新输入,或者关闭程序:客户存在则提示客户输入密码: 3.判断密码是否正确,如果不正确则提示用户重新输 ...

  8. contesthunter CH Round #64 - MFOI杯水题欢乐赛day1 solve

    http://www.contesthunter.org/contest/CH Round %2364 - MFOI杯水题欢乐赛 day1/Solve Solve CH Round #64 - MFO ...

  9. noip2011提高组day1+day2解题报告

    Day1 T1铺地毯https://www.luogu.org/problem/show?pid=1003 [题目分析] 全部读入以后从最后一个往前找,找到一个矩形的范围覆盖了这个点,那这个矩形就是最 ...

  10. 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中

    题目名称 正确答案  序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...

随机推荐

  1. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第6章.蜂巢

    第6章--蜂巢 蜂巢简介 网站开发完,就需要测试.部署.在服务器上运行. 网易蜂巢: 采用Docker容器化技术的云计算平台 https://c.163.com 容器管理:容器可被视作为云主机的服务器 ...

  2. mpvue笔记

    简介: mpvue 修改了 Vue.js 的 runtime 和 compiler 实现,为小程序开发引入 Vue.js 开发体验 我觉得就像scss一样,写的时候方便,最后还是要转成css文件 搭建 ...

  3. leetcode-三数之和(java)

     三数之和     给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可 ...

  4. 【转】《王者荣耀》技术总监复盘回炉历程:没跨过这三座大山,就是另一款MOBA霸占市场了

    如今已经大获市场成功的<王者荣耀>一直是业内各方关注的对象,而我们也知道这款产品在成为国民级游戏之前,也遇到过一段鲜有人知的调优期.也就是在2015年8月18号正式不删档测试版本推出之后, ...

  5. 腾讯地图和百度地图的PHP相互转换

    /** * 百度地图---->腾讯地图 * @param double $lat 纬度 * @param double $lng 经度 * @return array(); */ functio ...

  6. C++ 学习笔记之——字符串和字符串流

    1. 字符数组 字符数组,也就是存放字符类型数据的数组,只不过字符数组的结尾必须是 '\0'.C++ 已经提供了一些字符串处理函数,这些函数被封装在头文件 和 <string.h> 中. ...

  7. Java并发简介

    年轻的时候学会了“使用”Servlet后,感觉自己什么都会做了,之后就不停的写所谓的业务逻辑,框架(这里说的不是structs,spring等,就是说servlet)给人们屏蔽了很多复杂性(更别说构建 ...

  8. 6.azkban的监控

    azkaban自带的监控flow自带的邮件功能SLA总结写程序监控job情况监控azkaban的元数据库使用azkaban API监控总结 azkaban自带的监控 azkban目前仅仅支持邮件监控, ...

  9. TensorFlow安装解惑

    本文整理自网络,若有侵犯请告知. 1.安装环境 目前TensorFlow社区推荐的环境是Ubuntu, 但是TensorFlow同时支持Mac,Windows上的安装部署. 2.关于GPU版本 因为深 ...

  10. TCP系列30—窗口管理&流控—4、Cork算法

    一.Cork算法概述 Cork算法与Nagle算法类似,也有人把Cork算法称呼为super-Nagle.Nagle算法提出的背景是网络因为大量小包小包而导致利用率低下产生网络拥塞,网络发生拥塞的时候 ...