首页 > 其他分享 >初中信息奥赛模拟测试

初中信息奥赛模拟测试

时间:2024-01-14 17:00:13浏览次数:27  
标签:10 && int sum 奥赛 ans 初中 void 模拟

初中信息奥赛模拟测试

T1 ZEW 玩扫雷

image

\(n\) 和 \(m\) 都是小的,枚举即可。

#include<bits/stdc++.h>
#define int long long 
#define endl '\n'
using namespace std;
const int N=1010;
template<typename Tp> inline void read(Tp&x)
{
    x=0;register bool z=1;
    register char c=getchar();
    for(;c<'0'||c>'9';c=getchar()) if(c=='-') z=0;
    for(;'0'<=c&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);
    x=(z?x:~x+1);
}
void wt(int x){if(x>9)wt(x/10);putchar((x%10)+'0');}
void write(int x){if(x<0)putchar('-'),x=~x+1;wt(x);}
int n,m,sum[N][N];
char a[N][N];
signed main()
{
	#ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
    #endif
    read(n),read(m);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>a[i][j];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(a[i][j]=='.')
            {
                if(i-1>0&&j-1>0&&a[i-1][j-1]=='*') sum[i][j]++;
                if(i-1>0&&j>0&&a[i-1][j]=='*') sum[i][j]++;
                if(i-1>0&&j+1<=m&&a[i-1][j+1]=='*') sum[i][j]++;
                if(i>0&&j-1>0&&a[i][j-1]=='*') sum[i][j]++;
                if(i>0&&j+1<=m&&a[i][j+1]=='*') sum[i][j]++;
                if(i+1<=n&&j-1>0&&a[i+1][j-1]=='*') sum[i][j]++;
                if(i+1<=n&&j+1<=m&&a[i+1][j+1]=='*') sum[i][j]++;
                if(i+1<=n&&j>0&&a[i+1][j]=='*') sum[i][j]++;
            }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            if(a[i][j]=='.') cout<<sum[i][j];
            else cout<<a[i][j];
        cout<<endl;
    }
}
  • 注意 当 \(a_{i,j}\) 是 \("."\) 时,他周围可能一个地雷也没有,那么此时 \(sum_{i,j}\) 就是 \(0\)。
    所以最后输出时,一定不能是
    if(sum[i][j]!=0) cout<<sum[i][j];
    
    不然所有的 \(0\) 都会输出成 \("."\),像这样:image

所以这道题爆零了 \(qwq\)


T2 ZEW 的游戏

image

显然所有平行的直线中只能要一个。

那么我们可以通过 \(\dfrac{y_i-y_j}{x_i-x_j}\) 求出斜率 \(k\),所以就是求能求出的 \(k\) 的个数。

所以可以先把所有的直线的 \(k\) 都求出来,之后可以排序再去重,也可以用 \(map\)。

建 \(map\) 时 \(<>\) 内第一个是下标( \(key\) ),第二个是返回值( \(value\) )。

#include<bits/stdc++.h>
#define int long long 
#define endl '\n'
using namespace std;
const int N=1010;
template<typename Tp> inline void read(Tp&x)
{
    x=0;register bool z=1;
    register char c=getchar();
    for(;c<'0'||c>'9';c=getchar()) if(c=='-') z=0;
    for(;'0'<=c&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);
    x=(z?x:~x+1);
}
void wt(int x){if(x>9)wt(x/10);putchar((x%10)+'0');}
void write(int x){if(x<0)putchar('-'),x=~x+1;wt(x);}
int n,ans,tot;
double c[N*N];
struct aa
{
    int x,y;
}e[N];
map<double,bool>q;
signed main()
{
    #ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
    #endif
    read(n);
    for(int i=1;i<=n;i++)
        read(e[i].x),read(e[i].y);
    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++)
        {
            if(e[i].x!=e[j].x) c[++tot]=(double)(e[i].y-e[j].y)/(e[i].x-e[j].x);
            else c[++tot]=0x7f7f7f;
            if(!q[c[tot]]) ans++;
            q[c[tot]]=1; 
        }
    cout<<ans;
}

\(k\) 一定要是 \(double\),所以代码中第 \(35\) 行括号里的 \(double\) 一定要加,\(\times 1.0\) 不好使 \(qwq\)

所以也爆零了


T3 ZEW 学分块

image

可以用双指针,定义 \(l,r\)。

枚举第二个分割点 \(r\),由此将 \(r\) 固定住,再去搞前两个分块。

而当前两个块差值最小的时候,也就是他们两个中最大值最小的时候,那么去找到第一个左块大于右块的 \(l\) 和最后一个左块小于右块的 \(l\),选择他们之中最优的那一个,去更新 \(ans\)。

通过赛时打出的暴力,我们知道每种情况的 \(ans\) 呈一个不规则的二次函数形状,所以出现第一个当前 \(ans\) 大于等于已经推出的 \(ans\) 时,就可以 \(break\) 了。

#include<bits/stdc++.h>
#define int long long 
#define endl '\n'
using namespace std;
const int N=5e7+10;
template<typename Tp> inline void read(Tp&x)
{
    x=0;register bool z=1;
    register char c=getchar();
    for(;c<'0'||c>'9';c=getchar()) if(c=='-') z=0;
    for(;'0'<=c&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);
    x=(z?x:~x+1);
}
void wt(int x){if(x>9)wt(x/10);putchar((x%10)+'0');}
void write(int x){if(x<0)putchar('-'),x=~x+1;wt(x);}
int n,a[N],sum[N],l,r,ans=0x7f7f7f7f;
signed main()
{
    #ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
    #endif
    read(n);
    for(int i=1;i<=n;i++)
        read(a[i]),
        sum[i]=sum[i-1]+a[i];
    l=1,r=2;
    while(r<n)
    {
        while(sum[l]<sum[r]-sum[l]&&l<r) l++;
        if(min({max({sum[l],sum[r]-sum[l],sum[n]-sum[r]}),max({sum[l-1],sum[r]-sum[l-1],sum[n]-sum[r]})})>=ans) break;
        ans=min({ans,max({sum[l],sum[r]-sum[l],sum[n]-sum[r]}),max({sum[l-1],sum[r]-sum[l-1],sum[n]-sum[r]})});
        r++;
    }
    cout<<ans;
}
  • 直接暴力的话超时 \(40\) 分,虽然根据他呈不规则二次函数而加了 \(n\) 个 \(break\) 。( \(n\) 是虚数)
  • 至于数据范围中给了一个 \(1\le a_i\le 233\),所以隔壁 @\(minecraft666\) 直接暴力枚举 \(233^2\),然后 \(A\) 掉了,就很离谱
  • 当然这道题正解应是二分答案,但 \(m=3\),所以双指针也是可以的。

T4 ZEW 玩 thd

\(\Huge 不会\)

标签:10,&&,int,sum,奥赛,ans,初中,void,模拟
From: https://www.cnblogs.com/Charlieljk/p/17963817

相关文章

  • 模拟 - CF1196C Robot Breakout
    RobotBreakout(CF1196C)思路这道题因为平面极大,暴力枚举每个点肯定会超时。所以,我们不妨从机器人出发。我们可以枚举每个机器人可以执行的操作:位置从\((X_i,Y_i)\)变为\((X_i-1,Y_i)\),即向左走。位置从\((X_i,Y_i)\)变为\((X_i,Y_i+1)\),即向上走。位置从\((X_......
  • 初中信息奥赛模拟测试
    初中信息奥赛模拟测试\(T1\)ZEW玩扫雷\(100pts\)原题:luoguP2670[NOIP2015普及组]扫雷游戏本题修改:本题的非地雷地区为.。正解chara[1010][1010];intmain(){ //freopen("mine.in","r",stdin); //freopen("mine.out","w",stdout); intn,m,i,j......
  • 初中英语优秀范文100篇-057My Favourite Story-我最喜欢的故事
    初中英语优秀范文100篇-057MyFavouriteStory-我最喜欢的故事PDF格式公众号回复关键字:SHCZFW057记忆树1MyfavoritestoryisTheNightoftheHorse.翻译我最喜欢的故事是《马之夜》简化记忆故事句子结构主语:Myfavoritestory主语是一个名词短语,由形容词"fav......
  • Ubuntu下运行LVGL模拟器
    目录一、前言二、下载并安装VSCode(方法很多,总之装好VSCode就行了)三、获取源码3.2方法一:从Github拉取源码(有梯子)3.3方法二:从Gitee码云拉取源码(无梯子)四、安装LinuxSDL2驱动五、编译源码一、前言​ LVGL是一个可高度可裁剪、低资源占用、界面美观且易用的C语言嵌入式系统......
  • NES 模拟器中音画同步问题
    背景模拟器是与游戏和播放器都有相似之处的系统。模拟器与游戏的相似之处,在于都需要一个采集输入--执行逻辑--然后按一定帧率(通常是60FPS)把画面显示出来的循环。但是模拟器又需要模拟音频设备,播放音频设备产生的声音样本,这点与播放器相似。与播放器一样,模拟器也要处理音、视频......
  • 初中英语优秀范文100篇-056I have the courage to accept the challenge-我有勇气接受
    PDF格式公众号回复关键字:SHCZFW056记忆树1Everyyearthereisasingingcompetitioninourschool.翻译每一年,我们学校都会举行一场歌唱比赛。简化记忆比赛句子结构主语("Everyyear"):表示时间状语的短语,意思是“每年”。谓语("thereis"):这是一个therebe句......
  • 1.11模拟赛 T1题解
    简要题意\(n\le10^3,\sumK_i\le3\times10^5\)思路首先容易想到一个暴力DP,\(f_{l,r,x}\)表示区间中最大值为\(x\)的最大值稍微想亿下可以发现如果这个位置选的不是区间最大值的话,答案一定不优所以我们可以直接\(f_{l,r}\)DP转移,但复杂度还是没变,我们把柿子列出来\(......
  • [ 20230308 CQYC省选模拟赛 T2 ] 塑料内存条
    题意给定\(n\)个不可重集,初始每个集合\(i\)有元素\(c_i\)。请你以下\(3\)种操作:1xy在集合\(x\)插入\(y\)。2xy将\(y\)集合所有数插入\(x\),并删除\(y\)集合(不影响别的集合的下标)3xy求\(x\)集合与\(y\)集合的交之和。Sol可塑性记忆。注意到前......
  • 1.11模拟赛 T2题解
    简要题意每个点有一定概率向前面的点连边,求两点之间距离的期望思路推柿子code#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineN1000005intn,m,u,v;constintmod=1e9+7;inta[N],sum[N],c[N],dep[N],s[N],f[N],g[N],h[N];intksm(intx......
  • 利用Python和fake_useragent模拟不同浏览器访问
    在Python中,您可以使用requests库来发送HTTP请求,并使用UserAgent对象设置请求头中的User-Agent字段,以模拟不同浏览器或设备。以下是一个示例代码,演示如何使用requests库和fake_useragent库获取https://www.mafengwo.cn/网页的内容:首先,确保您已经安装了requests和fake_useragent库,您......