自评:

(完成时间3.5时)

第一题 模拟 虽然A了,代码敲得有点慢

第二题 最短路 第一次敲对了,又考虑数据范围和答案范围,改错了,100分改成42分。QAQ。

第三题 乱搞 80分 还可以(因为没思路啊),不过也有A了的

如果第二题不手贱的话,day1 280分,day2再随便写点,妥妥的一等。

可惜没如果。(也还好不是联赛)。

P3392 涂国旗

    • 10通过
    • 267提交
  • 题目提供者kkksc03
  • 标签
  • 难度普及-

提交 讨论 题解

最新讨论

题目描述

某国法律规定,只要一个由N*M个小方块组成的旗帜符合如下规则,就是合法的国旗。(毛熊:阿嚏——)

  • 从最上方若干行(>=1)的格子全部是白色的。

  • 接下来若干行(>=1)的格子全部是蓝色的

  • 剩下的行(>=1)全部是红色的

现有一个棋盘状的破布,分成了N行M列的格子,每个格子是白色蓝色红色之一,小a希望把这个布改成该国国旗,方法是在一些格子上涂颜料,盖住之前的颜色。

小a很懒,希望涂最少的格子,使这块破布成为一个合法的国旗。

输入输出格式

输入格式:

第一行是两个整数,N,M

接下来N行是一个矩阵,矩阵的每一个小方块是'W'(白),'B'(蓝),'R'(红)中的一个

输出格式:

一个整数,表示至少需要涂多少块。

输入输出样例

输入样例#1:

4 5
WRWRW
BWRWB
WRWRW
RWBWR
输出样例#1:

11

说明

样例解释:

目标状态是

WWWWW
BBBBB
RRRRR
RRRRR

一共需要改11个格子

对于100%的数据,N,M<=50

100分代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
char mp[N][N],bf[N][N],w[N],b[N],r[N];
int n,m,ans=0x7fffffff;
inline int check(char *a,char *b){
int res=;
for(int i=;i<=m;i++) if(a[i]!=b[i]) res++;
return res;
}
void dfs(){
memcpy(bf,mp,sizeof mp);
for(int i=;i<=n-;i++){
int tans=;
for(int q=;q<=i;q++){
tans+=check(mp[q],w);
memcpy(mp[q],w,sizeof w);
}
for(int j=i+;j<=n-;j++){
int t2=,t3=;
for(int q=i+;q<=j;q++){
t2+=check(mp[q],b);
memcpy(mp[q],b,sizeof b);
}
for(int q=j+;q<=n;q++){
t3+=check(mp[q],r);
memcpy(mp[q],r,sizeof r);
}
tans+=t2+t3;
ans=min(ans,tans);
for(int q=i+;q<=n;q++) memcpy(mp[q],bf[q],sizeof bf[q]);
tans-=t2+t3;
}
for(int q=;q<=n;q++) memcpy(mp[q],bf[q],sizeof bf[q]);
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%s",mp[i]+);
for(int i=;i<=m;i++) w[i]='W';
for(int i=;i<=m;i++) b[i]='B';
for(int i=;i<=m;i++) r[i]='R';
dfs();
printf("%d\n",ans);
return ;
}

P3393 逃离僵尸岛

    • 1通过
    • 119提交
  • 题目提供者kkksc03
  • 标签
  • 难度尚无评定

提交 讨论 题解

最新讨论

题目描述

小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家。

该国有N个城市,城市之间有道路相连。一共有M条双向道路。保证没有自环和重边。

K个城市已经被僵尸控制了,如果贸然闯入就会被感染TAT...所以不能进入。由其中任意城市经过不超过S条道路就可以到达的别的城市,就是危险城市。换句话说只要某个没有被占城市到某个被占城市不超过s距离,就是危险。

小a住在1号城市,国际空港在N号城市,这两座城市没有被侵略。小a走每一段道路(从一个城市直接到达另外一个城市)得花一整个白天,所以晚上要住旅店。安全的的城市旅馆比较便宜要P元,而被危险的城市,旅馆要进行安保措施,所以会变贵,为Q元。所有危险的城市的住宿价格一样,安全的城市也是。在1号城市和N城市,不需要住店。

小a比较抠门,所以他希望知道从1号城市到N号城市所需要的最小花费。

输入数据保证存在路径,可以成功逃离。输入数据保证他可以逃离成功。

输入输出格式

输入格式:

第一行4个整数(N,M,K,S)

第二行2个整数(P,Q)

接下来K行,ci,表示僵尸侵占的城市

接下来M行,ai,bi,表示一条无向边

输出格式:

一个整数表示最低花费

输入输出样例

输入样例#1:

13 21 1 1
1000 6000
7
1 2
3 7
2 4
5 8
8 9
2 5
3 4
4 7
9 10
10 11
5 9
7 12
3 6
4 5
1 3
11 12
6 7
8 11
6 13
7 8
12 13
输出样例#1:

11000

说明

对于20%数据,N<=50

对于100%数据,2 ≦ N ≦ 100000, 1 ≦ M ≦ 200000, 0 ≦ K ≦ N - 2, 0 ≦ S ≦ 100000

1 ≦ P < Q ≦ 100000

100分代码:

#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
inline const int read(){
register int x=,f=;
register char ch=getchar();
while(ch>''||ch<''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
#define ll long long
#define xx first
#define yy second
#define pir pair<int,int>
const int N=2e5+;
struct node{
int v,next;
}e[N<<];
int tot,head[N],js[N],pw[N];
bool vis[N],JS[N];
int n,m,s,k,P,Q;
void add(int x,int y){
e[++tot].v=y;
e[tot].next=head[x];
head[x]=tot;
}
void bfs(int S,int lim){
int dis[N]={};
memset(vis,,sizeof vis);
queue<pir>q;
q.push(make_pair(S,));
vis[S]=;
while(!q.empty()){
pir h=q.front();q.pop();
if(h.yy==lim) continue;
for(int i=head[h.xx];i;i=e[i].next){
if(!dis[e[i].v]){
dis[e[i].v]=dis[h.xx]+;
if(!vis[e[i].v]){
vis[e[i].v]=;
pw[e[i].v]=Q;
q.push(make_pair(e[i].v,dis[e[i].v]));
}
}
}
}
}
void spfa(){
ll dis[N];
memset(dis,,sizeof dis);
memset(vis,,sizeof vis);
queue<int>q;
q.push();
dis[]=;
vis[]=;
while(!q.empty()){
int h=q.front();q.pop();
vis[h]=;
for(int i=head[h];i;i=e[i].next){
int v=e[i].v;
if(JS[v]) continue;
if(dis[v]>dis[h]+(ll)pw[v]){
dis[v]=dis[h]+(ll)pw[v];
if(!vis[v]){
vis[v]=;
q.push(v);
}
}
}
}
printf("%lld\n",dis[n]);
}
int main(){
n=read(),m=read(),k=read(),s=read();
P=read(),Q=read();
for(int i=;i<=k;i++) js[i]=read();
for(int i=,x,y;i<=m;i++) x=read(),y=read(),add(x,y),add(y,x);
for(int i=;i<=k;i++) bfs(js[i],s);
for(int i=;i<=n;i++) if(!pw[i]) pw[i]=P;pw[n]=;
for(int i=;i<=k;i++) JS[js[i]]=;
spfa();
return ;
}

P3394 机器人的领域

    • 0通过
    • 97提交
  • 题目提供者kkksc03
  • 标签
  • 难度尚无评定

提交 讨论 题解

最新讨论

题目描述

一个机器人从xoy平面出发,按照给定的程序运行,程序中的一个字母E\S\W\N分别表示机器人往东\南\西\北走1米。我们会给出则一段有N个指令的程序。机器人将连续的执行这段程序K次。从原点开始,机器人每执行完一步,就会在地上做一个标记(原点也留了一个)。现在问,所有程序结束后,有多少个1*1的小方形,其四个顶点都被坐上了标记?

输入输出格式

输入格式:

第一行两个整数,N,K

第一行是长度为N的字符串,每个字符只会是一个字母E\S\W\N分别表示机器人往东\南\西\北走1米。

输出格式:

一个整数,表示符合要求的小方格数量

输入输出样例

输入样例#1:

6 3
SEENWS
输出样例#1:

6

说明

20% N<=50,K=1;

另外20% k=1

另外20% N<=50

100% N<=100000,0<k<=10^9

80分代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=1e5+;
struct node{
int x,y;
bool operator < (const node a) const {
if(x==a.x) return y<a.y;
return x<a.x;
}
bool operator == (const node a) const{
return x==a.x&&y==a.y;
}
bool operator != (const node a) const{
return x!=a.x||y!=a.y;
}
}ans[N<<];
char s[N];
int cnt,res,n,k;
bool vis[][];
node deal(int sx,int sy){
ans[++cnt]=(node){sx,sy};
int len=strlen(s);
for(int i=;i<len;i++){
if(s[i]=='N') ans[++cnt]=(node){++sx,sy};
else if(s[i]=='S') ans[++cnt]=(node){--sx,sy};
else if(s[i]=='W') ans[++cnt]=(node){sx,--sy};
else if(s[i]=='E') ans[++cnt]=(node){sx,++sy};
}
node t;
t.x=sx;
t.y=sy;
return t;
}
int ef(node x){
int l=,r=cnt;
while(l<r){
int mid=l+r>>;
if(x<ans[mid]||ans[mid]==x) r=mid;
else l=mid+;
}
return l;
}
int solve(){
sort(ans+,ans+cnt+);
cnt=unique(ans+,ans+cnt+)-(ans+);
for(int i=;i<=cnt;i++){
if(!vis[ans[i].x+][ans[i].y+]){
node la=(node){ans[i].x,ans[i].y+};
node ra=(node){ans[i].x-,ans[i].y};
node aa=(node){ans[i].x-,ans[i].y+};
int lp=ef(la);
if(ans[lp]!=la) continue;
int rp=ef(ra);
if(ans[rp]!=ra) continue;
int pp=ef(aa);
if(ans[pp]!=aa) continue;
res++;
vis[ans[i].x+][ans[i].y+]=;
}
}
}
int main(){
scanf("%d%d%s",&n,&k,s);
node t=deal(,);
solve();
int r1=res;
if(k==){printf("%d",res);return ;}
else{
deal(t.x,t.y);
solve();
int r2=res-r1;
printf("%lld\n",(ll)r1+(ll)r2*(ll)(k-));
//cout<<(ll)r1+(ll)r2*(ll)(k-1);
}
return ;
}

 改后的AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<set>
using namespace std;
struct node{
int x,y;
bool operator < (const node& a)const{
return x<a.x||(x==a.x&&y<a.y);
}
};
set<node>S;
long long n,k,ans,lr,r;
char s[];
int main(){
scanf("%d%d%s",&n,&k,s);
node now;
now.x=;now.y=;
S.insert(now);
for(int i=;i<=k;i++){
r=;
for(int j=;j<n;j++){
if(s[j]=='E')now.y++;
if(s[j]=='W')now.y--;
if(s[j]=='S')now.x--;
if(s[j]=='N')now.x++;
if(S.count(now)==){
node a,b,c,d,e,f,g,h;
a.x=now.x-;a.y=now.y-;b.x=now.x-;b.y=now.y;
c.x=now.x-;c.y=now.y+;d.x=now.x;d.y=now.y-;
e.x=now.x;e.y=now.y+;f.x=now.x+;f.y=now.y-;
g.x=now.x+;g.y=now.y;h.x=now.x+;h.y=now.y+;
if(S.count(a)==&&S.count(b)==&&S.count(d)==)r++;
if(S.count(b)==&&S.count(c)==&&S.count(e)==)r++;
if(S.count(d)==&&S.count(f)==&&S.count(g)==)r++;
if(S.count(e)==&&S.count(g)==&&S.count(h)==)r++;
S.insert(now);
}
}
if(r==lr){
ans+=(k-i+)*r;
break;
}
ans+=r;lr=r;
}
cout<<ans<<endl;
return ;
}

洛谷⑨月月赛Round2 官方比赛 OI的更多相关文章

  1. 洛谷⑨月月赛Round2 P3393逃离僵尸岛[最短路]

    题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入 ...

  2. 洛谷⑨月月赛Round2 P3392涂国旗[DP]

    题目描述 某国法律规定,只要一个由N*M个小方块组成的旗帜符合如下规则,就是合法的国旗.(毛熊:阿嚏——) 从最上方若干行(>=1)的格子全部是白色的. 接下来若干行(>=1)的格子全部是 ...

  3. 洛谷9月月赛round2

    洛谷9月月赛2 t1 题意:懒得说了 分析:模拟 代码: program flag; var a:..,..]of char; n,i,m,j,x,y,ans,k:longint; begin ass ...

  4. 洛谷五月月赛【LGR-047】划水记

    虽然月赛有些爆炸,但我永远资瓷洛谷! 因为去接水,所以迟到了十几分钟,然后洛谷首页就打不开了-- 通过洛谷题库间接打开了比赛,看了看\(TA\),WTF?博弈论?再仔细读了读题,嗯,判断奇偶性,不过要 ...

  5. 洛谷八月月赛Round1凄惨记

    个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...

  6. 洛谷P2460 [SDOI2007]科比的比赛(题解)(贪心+搜索)

    科比的比赛(题解)(贪心+搜索) 标签:算法--贪心 阅读体验:https://zybuluo.com/Junlier/note/1301158 贪心+搜索 洛谷题目:P2460 [SDOI2007] ...

  7. 洛谷P2777 [AHOI2016初中组]自行车比赛

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  8. 洛谷U14667 肝活动【比赛】 【状压dp】

    题目描述 Yume 最近在玩一个名为<LoveLive! School idol festival>的音乐游戏.他之所以喜欢上这个游戏,是因为这个游戏对非洲人十分友好,即便你脸黑到抽不出好 ...

  9. 洛谷 P2777 [AHOI2016初中组]自行车比赛

    题目描述 小雪非常关注自行车比赛,尤其是环滨湖自行车赛.一年一度的环滨湖自行车赛,需要选手们连续比赛数日,最终按照累计得分决出冠军.今年一共有 N 位参赛选手.每一天的比赛总会决出当日的排名,第一名的 ...

随机推荐

  1. 在ubuntu系统下下载和卸载skype

    1.下载 sudo apt-get install skypeforlinux 2.卸载 sudo apt remove skypeforlinux

  2. html5——伸缩比例

    基本概念 1.父盒子设置了伸缩属性,子盒子设置伸缩比例 2.以上设置完之后子盒子会按照比例分布在父盒子中 3.当设置伸缩比例时默认会按照x轴方向分配,因为默认情况下伸缩布局主轴方向是x轴方向 4.设置 ...

  3. SQL Server建库-建表-建约束

    ----------------------------------------SQL Server建库-建表-建约束创建School数据库------------------------------ ...

  4. IIS添加映射配置

    这种问题主要出现在使用应用程序级别的地址重写.如果你将一个动态的地址重写成虚拟的其它扩展名或者不带扩展名的地址,通常在IIS5.1和II6.0中,访问这样一个实际不存在的地址,首先会被Web服务器返回 ...

  5. MVC5+EasyUI+EF6+Linq通用权限系统出炉(1)

    1.先晒一下结构吧,

  6. Java中的接口详解

    接口 是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量.构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8) ...

  7. WPF在win7运行时报'Initialization of 'System.Windows.Setter' threw an exception.'

    写的一个WPF程序,在win10运行好好的,在win7就报'Initialization of 'System.Windows.Setter' threw an exception.' 原来是xaml ...

  8. ajax post 请求报错Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' heade

    jquery ajax跨域请求,webapi webconfig配置 前台代码(放了一部分) function CheckIn(roomno) { $.ajax({ url: 'https://www ...

  9. pandas操作,按序号取列,按条件筛选,df格式转换等

    这几天遇到比较多的dataframe操作,频繁使用,在此整理记录下,方便查找. 1.num为列的数字序号,name=df.columns[num],返回的是column的字符串名字,df[name]= ...

  10. 奇怪的print progname ":\n"日志

    [root@xxxxxxxx /home/ahao.mah] #tail /var/log/messages -f Feb 10 10:01:01 csaccurate-49-5011 } Feb 1 ...