首页 > 其他分享 >2024初三集训模拟测试1

2024初三集训模拟测试1

时间:2024-02-17 17:55:52浏览次数:23  
标签:le 测试点 limits sum 2024 freopen 初三 集训 sim

2024初三集训模拟测试1

\(T1\) edit \(100pts\)

  • 字符串模拟即可。

  • 貌似不能写成 while(cin>s) ,因为每两个单词中可能不只有一个空格。

    点击查看代码
    string s;
    int main()
    {
    	freopen("edit.in","r",stdin);
    	freopen("edit.out","w",stdout);
    	getline(cin,s);
    	cout<<s[0];
    	for(int i=1;i<s.size();i++)
    	{
    		if(('0'<=s[i-1]&&s[i-1]<='9'&&(('a'<=s[i]&&s[i]<='z')||('A'<=s[i]&&s[i]<='Z')))||((('a'<=s[i-1]&&s[i-1]<='z')||('A'<=s[i-1]&&s[i-1]<='Z'))&&'0'<=s[i]&&s[i]<='9'))
    		{
    			cout<<" ";
    		}
    		cout<<s[i];
    	}
    	fclose(stdin);
    	fclose(stdout);
    	return 0;
    }
    

\(T2\) game \(50pts\)

  • 感觉和 luogu P8818 [CSP-S 2022] 策略游戏 很像,但事实证明读假题了。
  • 部分分
    • 测试点 \(1\)
      • \(10pts\) :由于 \(n=1\) ,故 \(a_{1}\) 即为所求。
    • 测试点 \(2 \sim 3\)
      • \(20pts\) :由于 \(0 \le a_{i} \le 10^{6}\) ,故 \(\sum\limits_{i=1}^{n}a_{i}\) 即为所求。
    • 测试点 \(4 \sim 5\)
      • \(20pts\) :由于 \(-10^{6} \le a_{i} <0\) ,故 \(-\min\limits_{i=1}^{n} \{ a_{i} \}+\sum\limits_{i=1}^{n}a_{i}\) 即为所求。
  • 正解
    • Alice 一定只会在第一轮取大于等于 \(1\) 个数,且 Alice 会取完所有的非负数。然后两人轮流取最大值。
    • 贪心
      • Alice 第一轮取负数进行分讨。

        • 赛时及发现 \(hack\) 数据前只有 @wang54321 的 \(DP\) 做法 幸免于难。

          点击查看 hack 数据
          input:
          5
          -5121313 -81 -713 -25 -479
          
          ans:
          -819
          
          
        点击查看代码
        ll a[200000],b[200000];
        int main()
        {
        	freopen("game.in","r",stdin);
        	freopen("game.out","w",stdout);
        	ll n,m=0,ans=0,i;
        	cin>>n;
        	for(i=1;i<=n;i++)
        	{
        		cin>>a[i];
        		if(a[i]<0)
        		{
        			m++;
        			b[m]=a[i];
        		}
        		ans+=(a[i]>=0)*a[i];
        	}
        	sort(b+1,b+1+m,greater<int>()); 
        	if(n==m)
        	{
        		if(m%2==1)//取1 2 4 6 ...
        		{
        			ans+=b[1];//特判
        			for(i=2;i<=m;i++)
        			{
        				ans+=(i%2==0)*b[i];
        			}
        		}
        		else//取1 3 5 7 ...
        		{
        			for(i=1;i<=m;i++)
        			{
        				ans+=(i%2==1)*b[i];
        			}
        		}
        	}
        	else
        	{
        		if(m%2==1)//取2 4 6 ...
        		{
        			for(i=1;i<=m;i++)
        			{
        				ans+=(i%2==0)*b[i];
        			}
        		}
        		else//取1 3 5 7 ...
        		{
        			for(i=1;i<=m;i++)
        			{
        				ans+=(i%2==1)*b[i];
        			}
        		}
        	}
        	cout<<ans<<endl;
        	fclose(stdin);
        	fclose(stdout);
        	return 0;
        }
        
    • \(DP\)

\(T3\) score \(50pts\)

  • 简化题意:给定一个长度为 \(n\) 的序列 \(a\) ,求 \(\sum\limits_{l=1}^{n}\sum\limits_{r=l}^{n}[(\sum\limits_{k=l}^{r}a_{k}) \bmod (r-l+1)]\) 。

  • 部分分

    • 测试点 \(1 \sim 5\)
      • \(50pts\) :前缀和优化暴力枚举。时间复杂度为 \(O(n^{2})\) 。
    • 测试点 \(6 \sim 7\)
      • \(20pts\) :由于 \(0 \le a_{i} \le 2\) ,故对于每段最长的一段连续区间 \([l,r]\) 满足 \(a_{l}=a_{l+1}=a_{l+2}= \dots =a_{r}\) ,则这段区间对答案产生的贡献为 \(\dbinom{r-l+1}{2}=\dfrac{(r-l+1)(r-l)}{2}\) 。
  • 正解

    • \(\sum\limits_{l=1}^{n}\sum\limits_{r=l}^{n}[(\sum\limits_{k=l}^{r}a_{k}) \bmod (r-l+1)]\) 等价于 \(\sum\limits_{l=1}^{n}\sum\limits_{r=l}^{n}[\sum\limits_{k=l}^{r}(a_{k}-\frac{\sum\limits_{k=l}^{r}a_{k}}{r-l+1})=0]\) 。
    • 观察到 \(0 \le a_{i} \le 100\) ,考虑枚举 \(\frac{\sum\limits_{k=l}^{r}a_{k}}{r-l+1}=x(x \in [\min\limits_{i=1}^{n} \{ a_{i} \},\max\limits_{i=1}^{n} \{ a_{i} \}])\) 。
    • 使用前缀和优化 \(\sum\limits_{k=l}^{r}(a_{k}-x)\) 。具体地,有 \(sum_{i}=\sum\limits_{k=1}^{i}(a_{k}-x)\) 。此时有 \(\begin{aligned} \sum\limits_{l=1}^{n}\sum\limits_{r=l}^{n}[\sum\limits_{k=l}^{r}(a_{k}-x)=0]=\sum\limits_{l=1}^{n}\sum\limits_{r=l}^{n}[sum_{r}-sum_{l-1}=0]=\sum\limits_{l=1}^{n}\sum\limits_{r=l}^{n}[sum_{r}=sum_{l-1}] \end{aligned}\) 。
    • 用桶来记录 \(sum\) 出现的次数即可。
      • 因存在负数的情况,故将得到的 \(sum\) 加上一个比较大的数。
      • 要处理 \(sum_{0}\) 的情况。
    点击查看代码
    ll a[200001],sum[200001],vis[21000001];
    int main()
    {
    	freopen("score.in","r",stdin);
    	freopen("score.out","w",stdout);
    	ll n,ans=0,minn=0x7f7f7f7f,maxx=0,i,j;
    	cin>>n;
    	for(i=1;i<=n;i++)
    	{
    		cin>>a[i];
    		minn=min(minn,a[i]);
    		maxx=max(maxx,a[i]);
    	}
    	for(i=minn;i<=maxx;i++)
    	{
    		vis[sum[0]+maxx*n]=1;
    		for(j=1;j<=n;j++)
    		{
    			sum[j]=sum[j-1]+a[j]-i;
    			ans+=vis[sum[j]+maxx*n];
    			vis[sum[j]+maxx*n]++;
    		}
    		for(j=0;j<=n;j++)
    		{
    			vis[sum[j]+maxx*n]=0;
    		}
    	}
    	cout<<ans<<endl;
    	fclose(stdin);
    	fclose(stdout);
    	return 0;
    }
    

\(T4\) city \(60/75pts\)

  • 部分分
    • \(60pts\) :输出 -1
    • 测试点 \(5 \sim 7\)
      • \(15pts\) :由于 \(x=1\) ,故只有一个强连通分量(环)。此时 \(m\) 需满足 \(n \le m \le A_{n}^{2}=(n-1)n\) 时有解,构造时先拿出 \(n\) 条边使得 \(1 \sim n\) 构成一个环,剩下的随便构造即可(上界为完全图);否则无解。

        点击查看代码
        if(x==1)
        {
        	sum=0;
        	if(n<=m&&m<=n*(n-1))
        	{
        		for(i=1;i<=n-1;i++)
        		{
        			cout<<i<<" "<<i+1<<endl;
        		}
        		cout<<n<<" "<<1<<endl;
        		sum=n;
        		if(sum<m)
        		{
        			for(i=1;i<=n-1;i++)
        			{
        				for(j=1;j<=n;j++)
        				{
        					if(j!=i&&j!=i+1)
        					{
        						sum++;
        						cout<<i<<" "<<j<<endl;
        						if(sum==m)
        						{
        							break;
        						}
        					}
        				}
        				if(sum==m)
        				{
        					break;
        				}
        			}
        			if(sum<m)
        			{
        				i=n;
        				for(j=1;j<=n;j++)
        				{
        					if(j!=n&&j!=1)
        					{
        						sum++;
        						cout<<i<<" "<<j<<endl;
        						if(sum==m)
        						{
        							break;
        						}
        					}
        				}
        			}
        		}
        	}
        	else
        	{
        		cout<<-1<<endl;
        	}
        }
        
    • 测试点 \(8 \sim 10\)
      • \(15pts\) :由于 \(x=n\) ,故有 \(n\) 个强连通分量(孤立点)。此时 \(q,m\) 需满足 \(q=0,0 \le m \le \dbinom{n}{2}=\dfrac{(n-1)n}{2}\) 时有解,构造时随便构造;否则无解。

        点击查看代码
        if(x==n)
        {
        	sum=0;
            if(q==0)
            {
                if(m<=(n-1+1)*(n-1)/2)
                {
                    for(i=1;i<=n-1;i++)
                    {
                        for(j=i+1;j<=n;j++)
                        {
                            sum++;
                            cout<<i<<" "<<j<<endl;
                            if(sum==m)
                            {
                                break;
                            }
                        }
                        if(sum==m)
                        {
                            break;
                        }
                    }
                }
                else
                {
                    cout<<-1<<endl;
                }
            }
            else
            {
                cout<<-1<<endl;
            }
        }
        
  • 正解

总结

  • 赛时估分 \(100+30+50+30=210pts\) ,实际得分 \(100+50+50+[60,75]=[260,275]pts\) 。
    • 部分分造得很足。
  • \(T2\) 贪心想假了。
  • \(T3\) 测试点 \(6 \sim 7\) 的 \(20pts\) 没写。

后记

  • 数据有点水,明显的 \(hack\) 数据没有加。
  • \(T4\) 赛时没有 Special Judge ,所以开的“文本比较”。赛后 @wkh2008Special Judge 写了。但 Special Judge 很“脆弱”,放过了部分错解,但只要不太离谱就不会挂。

标签:le,测试点,limits,sum,2024,freopen,初三,集训,sim
From: https://www.cnblogs.com/The-Shadow-Dragon/p/18018036

相关文章

  • Codeforces 解题报告(202402)
    CodeforcesRound926D-SashaandaWalkintheCitydp,主要难点在于设状态。发现子树内一旦存在一个点,到当前子树的根节点路径上有两个危险点,那么除了那条链所属的子树,其他的点就都不能选了。所以把这个性质放进状态,设\(f_{u,0/1}\)表示以\(u\)为根的子树内,是否存在一......
  • 2024初三集训模拟测试1
    2024初三集训模拟测试1所以正解和一行\(-1\)等分T1edit:语法题。考getline正确使用T2game:简单\(dp\)也可以贪心,见The_Shadow_Dragon。注意初始化。CODE#include<bits/stdc++.h>usingnamespacestd;usingllt=longlong;usingull=unsignedlonglong;......
  • 2024.2.17模拟赛T1题解
    先考虑\(q=(1...n)\)的情况:发现如果设\(divcnt(p)\)表示将\(p\)划分为极小值域连续段的个数,那满足\(divcnt(p)\gem\)的排列都是合法的。那现在要求出有多少个排列符合条件可以先算出长度为\(i\),\(divnct\)为\(1\)的排列个数,这可以用dp解决然后再背包一下,就能求......
  • 2024-02-17-物联网C语言(4-预处理)
    4.预处理4.1c语言的编译过程gcc-Ehello.c-ohello.i#1.预编译gcc-Shello.i-ohello.s#2.编译gcc-chello.s-ohello.o#3.汇编gcchello.o-ohello_elf#4.链接预编译将.c中的头文件展开、宏展开编译将预处理之后的.i文件生成.s汇编文件......
  • IDEA 2024.1:Spring支持增强、GitHub Action支持增强、更新HTTP Client等
    有段时间没有更新IDEA了,早上看到IntelliJIDEA2024.1EAP5发布的邮件提示,瞄了一眼,发现真的是越来越强了,其中不少功能对我来说还是非常有用的。也许这些能力对关注DD的小伙伴也有帮助,所以搞篇博客介绍和推荐一下。Spring、Quarkus等主流框架的支持增强SearchEverywhere功能......
  • 2024寒假集训纪要 & 闲话 (下半)
    2.16本来说要写\(4\)道多项式的题的,到最后算上\(\text{AC}\)自动机之类的也没\(4\)道题\(\color{white}{唔,我好想补完春节期间在家看的『约会大作战(第三部)』啊,但是我没有【数据删除】所以看不了诶}\)明天似乎有模拟赛?寄寄寄寄寄寄寄寄寄寄搞了个题单,但是看起来意义不......
  • 2024-02-17 有一个观点有松动了,没房没车没存款,配不配
       2024-02-17     好像挺根深蒂固的,没房没车没存款,都没有资格结婚恋爱,在女人面前也很自卑。   直到我叔和婶娘,跟我说,这个不讲配不配得上,而是讲缘分的。举了现实的例子,富家女嫁穷小伙的,帮穷小伙买车买房。   还有一些外省嫁过来的。还有我们家,几个叔......
  • 2024-02-17-物联网C语言(3-函数)
    3.函数3.1函数的概念函数是c语言的功能单位,实现一个功能可以封装一个函数实现。定义一个函数的时候需要一切以功能为目的,根据功能去定义函数的参数和返回值。3.2函数的分类3.2.1从定义角度分类库函数(c库实现)自定义函数(程序员自定义函数)系统调用(操作系统实现的函数)3.......
  • 2024 寒假做题总结
    P2146[NOI2015]软件包管理器思路分析树链剖分板子,每次安装时,将\(1\)到\(x\)的链变为\(1\),卸载时,将\(x\)的子树变为\(0\)。代码#include<iostream>usingnamespacestd;inlineintread(){registerintx=0,f=1;registercharc=getchar();while(c<'0'......
  • 刷题记录_2024寒假2/17
    我都AFO了为什么还要我写题目P多少多少默认洛谷P3313旅行题意略,自己不会看吗考虑对每个信仰开一个线段树,下标为dfs序,然后就是树剖板子对于这种开一堆动态开点线段树的题目可以存每个线段树的根节点然后就只需要开一个结构体了code:#include<bits/stdc++.h>#definelct[n......