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. ...
随机推荐
- Qt-Qml-播放视频-失败版-只有声音没有图像
失败版代码 import QtQuick 2.7 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.0 import QtMultimedia ...
- JEMTER简单的测试计划
测试计划一 1)测试网站:http://www.geneedu.cn/和http://supu01.1688.com/ 2)测试目的是该网站在负载达到20 QPS 时的响应时间. 备注: QPS : ...
- Python3.6+selenium3.8+Firefox5.7 环境搭建
大家好,我是阿哲,本人是从php转岗过来学习测试的一名小菜! 在学习selenium过程中,发现运行selenium有很多的问题. 我们在利用pip install selenium 安装的最新版后, ...
- 关于axios跨域带cookie
axios 设置 withCredentials :true $u = $_SERVER['HTTP_REFERER'];$u = preg_replace('#/$#', '', $u);head ...
- C++与C#数据类型对应关系总结
https://blog.csdn.net/u010159842/article/details/51720458 添加: 1.c++参数含有&,c#也需要用ref关键字. 2.在c++中声明 ...
- 进程间通信:命名管道FIFO(2)
一.命名管道 如果我们想在不相关的进程之间交换数据,可以用FIFO文件来完成这项工作,它通常也被称为命名管道.命名管道是一种特殊类型的文件,它在文件系统中以文件名的形式存在,但是它的行为却和我们已经见 ...
- TCP系列37—Keep Alive—1、TCP存活检测
一.TCP存活(keepalive)检测的背景 对于TCP设计来说,如果一个客户端和服务器端建立连接后,不在进行数据传输,那么这个连接将会一直存在下去,理论上即使中间的路由器崩溃重启.或者中间的网络线 ...
- 无法启动此程序,因为计算机中丢失 zlibd.dll【OSG】
在配置OSG的过程中遇到了这个问题.记录一下. zlibd.dll这个DLL可以在第三方库3rdParty里面找到.找到之后复制到OSG的bin目录下即可.
- Nautilus-Share-Message: Called "net usershare info" but it failed: Failed to
See what nautilus processes are running : ps aux | grep nautilus Kill all nautilus processes you see ...
- MHDD工具使用简写
检查硬盘,建议接主板一口,DOS工具箱输入mhdd回车进入界面 输入硬盘接口号(这里不固定) 按F4是进行硬盘扫描,按两次就开始,按方向键进行快进 Mhdd界面输入 erase命令:擦除指定扇区范围内 ...