LYDSY模拟赛day9 2048
/*
大模拟题,做的时候思路还是比较清晰的
*/
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#define ll long long
#define fo(i,l,r) for(int i = l;i <= r;i++)
#define fd(i,l,r) for(int i = r;i >= l;i--)
using namespace std;
const int maxn = ;
ll read(){
ll x=,f=;
char ch=getchar();
while(!(ch>=''&&ch<='')){if(ch=='-')f=-;ch=getchar();};
while(ch>=''&&ch<=''){x=x*+(ch-'');ch=getchar();};
return x*f;
}
int n,m;
int dx[] = {,,-,};
int dy[] = {-,,,};
int flag[][];
bool vis[][];
ll mp[][],d,k,v;
ll ans1,ans2;
ll judge(int y,int x,ll val){
if(y < || y > n || x < || x > n || vis[y][x]) return -;
if(!mp[y][x]) return val;
if(mp[y][x] == val) return val*;
return -;
}
bool tran(int op){
memset(vis,false,sizeof(vis));
bool cg = false;
int st1,ed1,dr1,st2,ed2,dr2;
int ny,nx,cy,cx;
ll tmp,rst;
d = read();
k = read();
v = read();
if(d == ){
st1 = n;
ed1 = ;
dr1 = -;
}else{
st1 = ;
ed1 = n;
dr1 = ;
}
if(d == ){
st2 = n;
ed2 = ;
dr2 = -;
}else{
st2 = ;
ed2 = n;
dr2 = ;
}
for(int i = st1;;i += dr1){
for(int j = st2;;j += dr2){
tmp = mp[i][j];
cy = i;
cx = j;
if(tmp)while(){
ny = cy + dy[d];
nx = cx + dx[d];
rst = judge(ny,nx,tmp);
if(rst == -) break;
else{
cg = true;
mp[cy][cx] = ;
mp[ny][nx] = rst;
if(rst != tmp){
ans2 += rst;
vis[ny][nx] = true;
break;
}
cy = ny;
cx = nx;
}
}
if(j == ed2) break;
}
if(i == ed1) break;
}
if(!cg) return false;
ans1++;
ll r = ;
memset(flag,,sizeof(flag));
fo(i,,n){
fo(j,,n){
if(!mp[i][j]) flag[i][j] = ++r;
}
}
fo(i,,n){
fo(j,,n){
if(flag[i][j] == + k%r) mp[i][j] = v;
}
}
return true;
}
int main(){
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
n = read();
m = read();
int x,y,v;
y = read();x = read();v = read();mp[y][x] = v;
y = read();x = read();v = read();mp[y][x] = v;
fo(op,,m){
if(!tran(op)) break;
}
cout<<ans1<<endl<<ans2<<endl;
return ;
}
LYDSY模拟赛day9 2048的更多相关文章
- LYDSY模拟赛day1 String Master
/* 暴力枚举两个后缀,计算最长能匹配多少前缀. 最优策略一定是贪心改掉前 k 个失配的字符. 时间复杂度 O(n3). */ #include<cstdio> ],b[]; int ma ...
- LYDSY模拟赛day1 Tourist Attractions
/* 假设路径是 a − b − c − d,考虑枚举中间这条边 b − c,计 算有多少可行的 a 和 d. 设 degx 表示点 x 的度数,那么边 b − c 对答案的贡献为 (degb − 1 ...
- LYDSY模拟赛day1 Walk
/* 依旧考虑新增 2^20 个点. i 只需要向 i 去掉某一位的 1 的点连边. 这样一来图的边数就被压缩到了 20 · 2^20 + 2n + m,然后 BFS 求出 1 到每个点的最短路即可. ...
- LYDSY模拟赛day2 Divisors
/* 注意分解质因数,如果i是,那么n/i也是,这样就可以解决分解质因数的时间问题了 当 k ≥ 1 时,只有这些数的约数才会对答案产生贡献. 求出 m 个数的所有不超过 n 的约数,去重后统计即可. ...
- LYDSY模拟赛day2 Market
/* orz claris,这个题的解法非常巧妙,首先是时间问题,其实这个问题只要离线处理一下就可以了,把物品和询问都按照时间排序,然后看一下能不能满足.然后,因为容量<=10^9,显然是不可能 ...
- LYDSY模拟赛day2 Dash Speed
/* 弃坑 */ #include<cstdio> #include<algorithm> using namespace std; ,M=N*; ],nxt[N<< ...
- LYDSY模拟赛day3 序列
NOIP不考可持久,弃坑
- LYDSY模拟赛day3 涂色游戏
/* 非常好的题 */ #include <cstdio> #include <iostream> #include <cstdlib> #include < ...
- LYDSY模拟赛day3 平均数
[ 问题描述]有一天, 小 A 得到了一个长度为 n 的序列.他把这个序列的所有连续子序列都列了出来, 并对每一个子序列都求了其平均值, 然后他把这些平均值写在纸上, 并对它们进行排序,最后他报出了第 ...
随机推荐
- SQL Server 分页
select top "+pageSize+" * from Table where id not in (select top "+(currentPage - 1) ...
- 淘宝npm镜像
来源:https://cnodejs.org/topic/4f9904f9407edba21468f31e 镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在 ...
- JZOJ 1312:关灯问题
传送门 少见的DP再DP题目.题面不短,但是可以看出来这是一道DP题.而且正解的算法复杂度应该是$O(N^3)$.而且给了部分$O(N^4)$的算法的分.可以看出来要AC是要在DP上加上优化的. 设$ ...
- JS-DOM对象知识点汇总(慕课)
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>D ...
- BZOJ1804: [Ioi2007]Flood 洪水
把点按坐标排序,每次找出最小的点,一定在最外层,再顺着把最外层的边删掉,经过了两次的边不会被冲毁. 其实不难写,但是写了很久. #include<bits/stdc++.h> #defin ...
- 【原】js检测移动端横竖屏
摘要:上周做了一个小项目,但是要放到我们的app上,然而需要横竖屏使用不同的样式.横屏一套,竖屏一套.调用了手机APP那里的api,可是他们那里ios和安卓返回的不一样. 各种头疼.于是用了css3的 ...
- C#------如何取出exe运行文件给客户使用
1.将解决方案配置里面的“Debug”转换成“Release” 2.右击“解决方案”,选着“重新生成解决方案”,以得到最新的版本 3.找到工程目录下的“bin”文件夹,里面有“Release”文件夹, ...
- 添加IP安全策略 远离系统Ping漏洞的威胁
懂得网络的人对于Ping这个最基本的网络命令一定很熟悉,它是一个非常好用的TCP/IP工具.它可以向你提供的地址发送一个小的数据包,然后侦听这台机器是否有“回答”.你可以使用机器的 Internet ...
- telnet连接ip
win7 telnet命令无法开启的解决方案(不是内部命令或外部命令) 出处:西西整理 作者:西西 日期:2012-12-21 14:22:06 [大 中 小] 评论: 0 | 我要发表看法 如果你想 ...
- host,nslookup,dig 命令安装
host,nslookup,dig依赖bind包,所以先看一下系统有没有bind包 命令如下:rpm -qa |grep bind 如果没有或者版本太低请升级安装 命令是:yum install bi ...