首页 > 其他分享 >7 .30 ACM总结

7 .30 ACM总结

时间:2024-07-30 20:17:14浏览次数:7  
标签:总结 int res sum 30 ACM ++ && underline

放假前几天,老师让我们打一场ACM来放松一下(非常好,放松不一定,被压力了)
C题
C题是个非常水的搜索题,队友看一眼就秒了。写的时候出了一点小问题,但也调出来了,此时我们来到了第6(总共7队)。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e3 + 5;
ll n, m, ans;
string a[N];
//int fd(int x, int y){
//    int res = 0;
//    if(y+3<m&&a[x][y+1]==a[x][y+3]&&a[x][y+1]=='e'&&a[x][y]==a[x][y+2])++res;
//    if(y-3>-1&&a[x][y-1]==a[x][y-3]&&a[x][y-1]=='e'&&a[x][y]==a[x][y-2])++res;
//    if(x+3<=n&&a[x+1][y]==a[x+3][y]&&a[x+1][y]=='e'&&a[x][y]==a[x+2][y])++res;
//    if(x-3>0&&a[x-1][y]==a[x-3][y]&&a[x-1][y]=='e'&&a[x-2][y]==a[x][y])++res;
//    return res;
//}
int fd(int x, int y){
    int res = 0;
    if(y + 3 < m and a[x][y + 1] == a[x][y + 3] and a[x][y + 1] == 'e' and a[x][y] == a[x][y + 2])++res;
    if(y - 3 > - 1 and a[x][y - 1] == a[x][y - 3] and a[x][y - 1] == 'e' and a[x][y] == a[x][y - 2])++res;
    if(x + 3 <= n and a[x + 1][y] == a[x + 3][y] and a[x + 1][y] == 'e' and a[x][y] == a[x + 2][y])++res;
    if(x - 3 > 0 and a[x - 1][y] == a[x - 3][y] and a[x - 1][y] == 'e' and a[x][y] == a[x - 2][y])++res;
    return res;
}
signed main(){
    scanf("%lld%lld",&n,&m); 
    for(int i=1;i<=n;++i)cin>>a[i];
    for(int i=1;i<=n;++i)
		for(int j=0;j<m;++j)
			if(a[i][j]=='h')ans+=fd(i,j);
    printf("%lld\n",ans);
    return 0;
}

过了很久,我们队开了很多个题,一个都没写出来(赛后发现我们以为可做的是比较难的)
我的一个队友推出F题的答案是

\[\sum_{j=1}^{n}n^{\underline{j}}(2^{n-j}-1) \]

这个式子可以 \(O(n)\) 计算出 \(n\) 的答案,直接做会变成 \(O(nk)\) 的复杂度。
考虑线性递推。
已知

\[\sum_{j=1}^{n}n^{\underline{j}}(2^{n-j}-1) \]

\[\sum_{j=1}^{n+1}(n+1)^{\underline{j}}(2^{n-j+1}-1) \]

直接维护不好做,可以分开维护,维护

\[\sum_{j=1}^{n+1}(n+1)^{\underline{j}}2^{n-j+1}和-\sum_{j=1}^{n+1}(n+1)^{\underline{j}} \]

因为 \(\sum_{j=1}^{n+1}(n+1)^{\underline{j}}=(n+1)+(n+1)n+...+(n+1)!\) 同\(\sum_{j=1}^{n}n^{\underline{j}}=n+(n-1)n+...+(n)!\)
所以 \(\sum_{j=1}^{n+1}(n+1)^{\underline{j}}=\sum_{j=1}^{n}n^{\underline{j}}*(n+1)+(n+1)\)
同理可推。

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e7 + 9, mod= 998244353;
int ans1[N],ans2[N],mi;
int t;
signed main()
{
	ans1[1]=ans2[1]=0;
	ans1[2]=2,ans2[2]=4;
	mi=4;
	for(int i=3;i<=1e7;i++)	
	{
		ans1[i]=(ans1[i-1]*i+i)%mod;
		ans2[i]=(ans2[i-1]*i+i*mi)%mod;	
		mi=mi*2%mod;
	}
	scanf("%d",&t);
	while(t--)
	{
		int x;
		scanf("%d",&x);
		printf("%lld\n",(ans2[x]-ans1[x]+mod)%mod);
	}
	return 0;
} 

既然说好了是劣弧,所以肯定只能在向左或者向右的 \(len>>1\) 个点中寻找(貌似不说也是这么干)。

再看如何寻找最小长度,线性一个个查找肯定不现实,所以就考虑区间最大值如何去操作。

可以发现有一个性质,一个区间内,一旦一个端点被固定下之后,这个区间内的最大值会随着区间的扩大而非严格单调递增,那么就找到这个区间的单调性了,现在多了一个二分可以选择。

维护区间最大值,看数据范围,可以用 ST 表进行维护。

现在就有了一种做法,确定一个位置,然后向前向后分别二分进行查找。

时间复杂度为 \(O(nlogn)\),可以通过此题。

#include <bits/stdc++.h>
using namespace std;
int n,a[300010],st[300010][32],lg[300010];
int query(int l,int r)
{
	int q=lg[r-l+1];
	return max(st[l][q],st[r-(1<<q)+1][q]);
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		st[i][0]=st[i+n][0]=st[i+n+n][0]=a[i];
	}
	lg[0]=-1;
	for(int i=1;i<=n+n+n;i++)lg[i]=lg[i>>1]+1;
	for(int j=1;(1<<j)<=n+n+n;j++)
		for(int i=1;i+(1<<j)-1<=3*n;i++)
			st[i][j]=max(st[i][j-1],st[i+(1<<j-1)][j-1]);
	for(int i=1;i<=n;i++)
	{
		int x,cur;
		scanf("%d",&x);
		int l=1,r=n,ii=i+n;
		while(l<r)
		{
			int mid=l+r>>1;
			if(max(query(ii-mid,ii-1),query(ii+1,ii+mid))>=x)r=mid;
			else l=mid+1;
		}
		if(l==n)printf("-1 "); 
		else printf("%d ",l);
	}
	return 0;
 } 

这次ACM第二简单的题没人写,一直死磕难的题,导致我们组得分偏低,正式比赛要吸取教训,但这次让我看到了同学们非常厉害的地方,每个人都有自己擅长的方面。没改完的题下次一定

标签:总结,int,res,sum,30,ACM,++,&&,underline
From: https://www.cnblogs.com/storms11/p/18333287

相关文章

  • 7/30 go协程
    协程是逻辑上优化的线程,不用切换CPU和内核态     组合访问   TRANSLATEwithxEnglishArabicHebrewPolishBulgarianHindiPortugueseCatalanHmongDawRomanianChineseSimplifiedHungarianRussianChineseTraditi......
  • 7.30总结
    T1很好的一道思维题。看到数据范围后,认为要么是\(O(1)\)的公式,要么是\(log_{2}n\)的算法。推了一下公式,推出来一个不等式,直接用二分来求解。T2开场感觉是一个树形DP,推了一会后发现一个节点的状态是具有后效性的,所以不能用DP进行求解。在观察一会之后,发现答案好像具有单......
  • 【调试笔记-20240730-Linux-OpenWrt 23.05 安装 Docker 配置 bitnami/Wordpress-with-
    调试笔记-系列文章目录调试笔记-20240730-Linux-OpenWrt23.05安装Docker配置bitnami/Wordpress-with-NGINX实现微信用户在线注册登录文章目录调试笔记-系列文章目录调试笔记-20240730-Linux-OpenWrt23.05安装Docker配置bitnami/Wordpress-with-NGINX实现......
  • 7.30(nginx反向代理、nginx负载均衡)
    一、nginx反向代理1、动态服务器后端服务器对标Java服务器1.修改index.html文件,并且发布web服务[root@git~]#echo"thisisjavawebserver">/usr/local/nginx/html/index.html[root@git~]#/usr/local/nginx/sbin/nginx [root@git~]#/usr/local/nginx/sbin/ng......
  • 2024-7-30 信友队模考总结
    开考这次的题目看着比较简单,第一题一眼前缀和,第二题是双指针,三四题不很一眼,感觉可以冲300pts。果然T1直接秒掉,J组难度。开写第二题感觉是双指针,而且也很有单调性,但是怎么实现并没有一下想出来,写了大概10min过了样例和自测,但是观摩的时候发现假了,我写的是伪双指针,\(\math......
  • ACM日常训练日记——7.29
    Atcoder训练EnoughArray高质量题,建议两个星期后重新去做,滑动窗口题,找连续子串的和大于k的数我一开始就直接想前缀和去做,但是没有考虑清楚连续的关系,只要到一个状态满足大于它的状态全部都满足然后关键的地方是每次找到以后,把最先进入的状态弹出,也就是说从1——k变成2——k......
  • 7月30日CSP-S模拟赛赛后总结
    7月30日模拟赛赛后总结\[7月30日\\模拟赛\\赛后总结\\2024年7月30日\\by\\\hcy\]洛谷同步:点我一、做题情况第一题比赛\(100pts\),赛后\(AC\)第二题比赛\(20pts\),赛后\(AC\)第三题比赛\(0pts\),赛后\(AC\)第四题比赛\(30pts\),赛后\(30pts\)......
  • 7.30模考总结
    省流:上300了(模考难度不大,橙黄绿蓝)\(7.30\)晴\(T1\)报数游戏Ⅱ题意简述求在一段序列前加入一个最小的正整数,使这个序列的每一个前缀和都为正数。思路:前缀和扫一遍,找最小前缀和,特判为正数的情况。\(code\)#pragmaG++optimize(3,"Ofast","inline")#pragmaG++optim......
  • leetcode题目总结
    前言本文为leetcode上的题目简单分析总结,仅作记录,欢迎提出建议,共同学习交流。 390.消除游戏列表 arr 由在范围 [1,n] 中的所有整数组成,并按严格递增排序。请你对 arr 应用下述算法:从左到右,删除第一个数字,然后每隔一个数字删除一个,直到到达列表末尾。重复上面的步......
  • Python 字节串转Hex字符串(一个久远的问题点总结)
    时间:2024.07.30作者:Yuan  这是一个今天看来似乎有点久远的问题,但是值得被记录和澄清一下!  那是在2022年1月份参与的一个项目中遇到的问题,大概需求是利用SHT40-AD1B-R2芯片,读取环境温度。其实就是通过i2c与这个温度传感器建立通讯,然后读取温湿度信息,对于上位机的......