[铁一中OI模拟赛]2017.8.20 Day2

T1 LGTB 玩扫雷

题目链接

思考:

纯模拟题,没啥说的。

#include <cstdio>
#include <cstring>

#define up(a,b,c) for(register int c=a;c<=b;++c)

int n,m,map[1005][1005];
char s[233];
int fx[]={0,0,-1,-1,-1,0,1,1,1},fy[]={0,-1,-1,0,1,1,1,0,-1};

int main(){
    //freopen("mine.in","r",stdin);
    //freopen("mine.out","w",stdout);
    scanf("%d%d",&n,&m);
    up(1,n,i){
        scanf("%s",s+1);
        up(1,m,j){
            if(s[j]==‘*‘) map[i][j]=1;
        }
    }
    up(1,n,i){
        up(1,m,j){
            if(map[i][j]) printf("*");
            else{
                int tot = 0;
                up(1,8,fuck){
                    int x = i+fx[fuck];
                    int y = j+fy[fuck];
                    if(map[x][y]) tot++;
                }
                printf("%d",tot);
            }
        }
        printf("\n");
    }
    return 0;
}

T2 LGTB 学分块

题目链接

思考:

最大值最小 这种词语就是二分答案的一般套路,但是如果直接对三个块进行二分会发现无从下手,所以需要优化。

最直接的一个思路就是枚举1-n每个点 将其分为第1块 之后在另外的另一块中进行二分,分成两块。

#include <cstdio>
#include <algorithm>

#define up(a,b,c) for(register int c=a;c<=b;++c)
typedef long long ll;

using std::min;
using std::max;

ll n,a[10005],K1,K2,K3,Out=1e18+7,sum[10005];

int main(){
    freopen("divide.in","r",stdin);
    freopen("divide.out","w",stdout);
    scanf("%lld",&n);
    up(1,n,i){
        scanf("%lld",&a[i]);
        sum[i]=sum[i-1]+a[i];
    }
    if(n==1){
        printf("%lld",a[1]);
        return 0;
    }
    if(n==2){
        printf("%lld",max(a[1],a[2]));
        return 0;
    }
    up(1,n,i){
        K1 = sum[i-1];
        ll l = i+1,r=n+1;
        //ll Fuck = 888;
        while(l<r-1){
            ll mid = (l+r)>>1;
            if(sum[mid-1]-K1<=sum[n]-sum[mid-1]) l = mid;
            else r = mid;
        }
        K2 = sum[l-1] - K1;
        K3 = sum[n] - sum[l-1];
        Out = min (Out,max(K1,max(K2,K3)));
        K2 = sum[l] - K1;
        K3 = sum[n] - sum[l];
        Out = min (Out,max(K1,max(K2,K3)));
    }
    printf("%lld\n",Out);
    return 0;
}

T3 LGTB 玩THD

待补题

时间: 2024-08-24 11:36:55

[铁一中OI模拟赛]2017.8.20 Day2的相关文章

[铁一中OI模拟赛]2017.8.19 Day1

T1 小Z的情书 题目链接 思考: 题目主要难度在于旋转后的位置如何,在手写了样例之后不难发现规律. #include <cstdio> #include <cstring> #define up(a,b,c) for(register int c=a;c<=b;++c) #define down(a,b,c) for(register int c=a;c>=b;--c) const int Maxn=1005; int n; bool Map[Maxn][Maxn],

[OI模拟赛]2017.8.24 Day5

A题 第K小的和 Tom有n个数字Ai,每个数字都不?一样.现在,Tom想把这些数字次数的选择,然后 把选定的数字求和,例如: Tom有2个数字,这2个数字分别是:3,5,那么,他能够组成的数字有: 3,5,6,8,9,10,11,12… 现在,他好奇组成的和中,第k?小的是多少,你能告诉他么? 输?入格式: 第?一?行两个正整数n,k表?示Tom?手上数字的个数,以及要求的是第?几?小的数字. 第?二?行n个正整数Ai,表?示Tom?手上每个数字的值. 输出格式: ?一个正整数,表?示第k?小

NOIP模拟赛(2017.9.15) -餐厅(restaurant)

餐厅(restaurant) [问题描述] 小R最近在玩一款模拟餐厅打工的游戏,其中有一个叠盘子的小游戏小R很喜欢.这个小游戏是这样的:有一个放盘子的机器会在一条直线上运动,机器里装着n个盘子,其中第i个盘子半径为ri,并且如果要放下该盘子,盘子的中心必须放在直线上xi的位置上,小R可以决定放下哪些盘子和放下这些盘子的顺序,盘子可以放在空位上,或者叠在一个上面没有其他盘子的盘子上,但要求被叠的盘子必须包含要叠上去的盘子.小R想要让叠出的盘子尽量高,请你计算出最高的一叠最多能叠几个盘子. [输入格

NOIP模拟赛(2017.9.15) -游戏(game)

游戏(game) [问题描述] 小R和小H在玩某个双人联机小游戏,一开始两人所操控的角色各有1点力量值,而在游戏中,每通过一关都会掉落一些力量强化道具.奇怪的是,明明是双人小游戏,每关却都会掉落3个相同的力量强化道具,于是两人决定每关每人先拿一个,剩下一个猜拳决定给谁.一个力量强化道具能使一个角色的力量值变为原来的若干整数倍,同一关卡掉落的道具倍率都相同,而不同的关卡可能不同.小R从攻略上找到了一些会产生特殊效果的力量值组合,他想知道哪些组合是按他们的道具分配方式有可能在通过某关时达成的. [输

[计蒜客NOIP模拟赛]2017.7.28Day1回顾反思总结

D1T1 打地鼠 题目链接 反思- 比赛得分-0 思考: 比赛时,以为T1是一道常规模拟题目,没怎么看数据范围.直接手动模拟,模拟完之后太自信也没有造数据Hack自己的程序.直接导致爆0.同时发现自己对二维前缀和的学习也只是在皮毛之上,没有深入思考与理解. 解题思路- 将图像旋转45°之后用二维前缀和维护,每次O(1)查询,时间复杂度O(N*N). 但是目前觉得这个图像旋转45°难以理解,打算手动模拟加深理解. 标程 #include<bits/stdc++.h> using namespac

【前行】◇第3站◇ 国庆训练营&#183;OI制模拟赛

[第3站] 国庆训练营·OI制模拟赛Ⅰ 怀着冲刺提高组400的愿望来到这个very small but very interesting 的训练营QwQ 在北大dalao的带领下开始了第一场OI模拟赛[炸心态ヽ(*.>Д<)o゜] ? 简单总结 感觉非常爆炸…… 第一题还好,一眼看出结论题,所以开始打表……没想到只打出来了一种情况(为什么全是特殊情况),然后就凉了. 第二题就开始崩溃了.首先画图思考了大概20分钟……然后发现想不出正解,就开始想要骗分.看了看数据阶梯,发现自己好像只能做前1/3

2017.6.11 校内模拟赛

题面及数据及std(有本人的也有原来的) :2017.6.11 校内模拟赛 T1 自己在纸上模拟一下后就会发现 可以用栈来搞一搞事情 受了上次zsq 讲的双栈排序的启发.. 具体就是将原盘子大小copy一下排个序 用两个指针维护两个数组(原数据 和 排序后的数据), 即分为1数据和2数组 将小于1指针指向的数据的2数组中的数据全部压入栈中 后进行消除, 将栈栈顶元素与当前1数组中的1指针指向的元素进行比较 相同则消除 后重复过程 直至指针超过N 后判断一下是否两个指针都超过了N... #incl

2017.11.25【NOIP提高组】模拟赛A组

2017.11.25[NOIP提高组]模拟赛A组 T1 3467. [NOIP2013模拟联考7]最长上升子序列(lis) T2 3468. [NOIP2013模拟联考7]OSU!(osu) T3 3472. [NOIP2013模拟联考8]匹配(match) T1 有转移方程f[i]=max{f[j]}+1,a[j]<a[i] 可以用线段树+离散化维护这个方程,因为涉及以往状态可以用主席树维护 打太丑爆空间了 Code 1 #include<cstdio> 2 #include<c

2017.12.02【NOIP提高组】模拟赛A组

2017.12.02[NOIP提高组]模拟赛A组 T1 3555[GDKOI2014模拟]树的直径 T2 3542[清华集训2014]冒泡排序 T3 3486[NOIP2013模拟联考10]道路改建(rebuild) T1 树直径的一个性质,两棵树合并,形成新的树的直径的两个端点为原树中的四个端点之二. 可以用反证法证明.用此性质本题就变成了lca裸题了 Code #include<cstdio> #include<cstring> #include<cmath> #i