记人生第一次差点没被zxy吊打

zxy AK IOI

Codeforces Round #812 (Div. 2)

Saturday, August 6, 2022 at 22:35UTC+8

这场是我前天打的vp,神犇zxy用其小号完美切A,B因TLE无果而终,喜提rating+247。本蒟蒻用其大号,A经WA成功AC,B一遍过,C因WA样例无果而终。rating+0。

先看A,他是我见过继Mark the Photographer 以后,最水的A。我绝对不会告诉你我第一次交上去还WA了。

就是注意他在同一条轴的同一个方向上只计算离原点最远的点。ans+=这些点到原点的距离*2。

#include<bits/stdc++.h>
using namespace std;
int t,n,x,y;
void solve(){
	long long ans=0;
	int maxx=0,minx=0,maxy=0,miny=0;
	for(int i=1;i<=n;i++){
		cin>>x>>y;
		if(x>0&&x>maxx)maxx=x;
		if(x<0&&x<minx)minx=x;
		if(y>0&&y>maxy)maxy=y;
		if(y<0&&y<miny)miny=y;
	}
	ans=2*(maxx-minx+maxy-miny);
	cout<<ans<<endl;
	return; 
}
int main(){
	cin>>t;
	while(t--){
		cin>>n;
		solve();
	}
	return 0;
}

 然后是我做出来的最后一道题----B

这道题看上去很复杂,以至于神犇zxy从WA到TLE最后也没有AC。

大家思考一个问题,一个数组要排列怎样才能达到所谓的最少步数。只有升序吗?NO。就很简单,他只要长得跟一座山一样就行了。纯升序或降序也是可以的。 总而言之,只要他不会在中间凹进去就行了。为啥?因为你中间有凹陷,他在执行的过程中就会被拦腰截断,0是不能再被减的。所以中间被0截断了两边就只能分开执行,就会增加步数。其他情况下,你就把区间逐步缩小就行了。那些都不用考虑了。如果中间有凹陷,则说明这个数组现在的排列不是最优的,就输出NO。否则YES。

#include<bits/stdc++.h>
using namespace std;
int t,n;
long long a[1000010];
void solve(){
	bool flag=0;
	//memset(a,0,sizeof(a));
	for(int i=1;i<=n;i++){
		cin>>a[i];
	} 
	for(int i=1;i<n;i++){
		if(flag==0){
			if(a[i]>a[i+1])flag=1;
		}else{
			if(a[i]<a[i+1]){
				cout<<"NO"<<endl;
				return;
			}
		}
	}
	cout<<"YES"<<endl;
	return;
}
int main(){
	cin>>t;
	while(t--){
		cin>>n;
		solve();
	}
	return 0;
}

这个题我一下就过了,真的没有被zxy吊打。只可惜是vp,不然就是我吊打他了。

真的是我第一次,一道题半个小时,一个小时就搞完了。B还不算我吃饭洗碗的时间。

您可能会好奇为啥我明知到饭点上了还要打vp。其实是因为当时yzy把我删了,心里很难过,无所事事,所以就去打了cf。我就知道。cf爽翻了。打完之后我沉浸在高潮的余韵中,睡了一觉醒来居然又想起了yzy。不过我不那么伤心了。 后来到了晚上那个恬不知耻的又给我加回来了。不过我也不责备他,加回来就好,只是叮嘱他下次不要再这样了。

所以这次没被zxy吊打,还得多谢yzy。


Codeforces Round #813 (Div. 2)

Saturday, August 13, 2022 at 22:35UTC+8

这次zxy还是用的小号,排了11000+。我虽然排12000+,但这场下来,我的rating-2=795(为什么会掉?啊啊啊啊啊)而zxy的是778。

我这次本该是被吊打的,但拿分数说话,居然没有。我突然觉得掉点没啥了。

实况是这样的:

 可以看到神犇zxy的A没有我快芜湖蛙蛤蛤蛤蛤蛤但是他B居然两分钟就过了???????????????????????????????????????????后来我问了他,确实是自己想出来的,没有问别人,跟我用的方法一样,而我TM用了一个小时才想出来,WA了两次,错误的思路把草稿纸都填满了,最终在还剩半个小时的时候过了

zxy,Orz!zxy,QAQ,zxy!

还是比较简单的,当然没有前面提到的两个A那么水。我一开始还没读懂题意。然后交了一遍,也是WA了一次,然后想明白了再交就过了,与之前的经历类似。

他给你一个排列,求最少交换多少次使前k个的和最小。我们知道和最小的话,前k个里面的数应该刚好是1~k这些数。 所以你只需要求这个排列的前1~k个数有多少个是不应该出现在这里的,也就是大于k的。他就会与k个之后的数进行交换得到需要的。

#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
int t,n,k,p[200];
void solve(){
	int ans=0;
	for(int i=1;i<=n;i++)cin>>p[i];
	//sort(p+1,p+k+1);
	for(int i=1;i<=k;i++)if(p[i]>k)ans++;
	cout<<ans<<endl;
	return;
}
int main(){
	cin>>t;
	while(t--){
		cin>>n>>k;
		solve();
	}
	return 0;
} 

为什么这么简单的题会有人想一个小时?????????

就是你从大到小考虑,因为大的数影响力更大。对于每一个数,都填在未被填的,最大的与其互质的数的位置。这就不用证明了吧,你不要跟我说什么gcd也不一定是1只要小就可以之类的。因为他是排列,所以肯定是有多数互质的条件的,不要想多了。然后贪心做吗?动点脑子。两个相邻的数必然互质。所以你就交换前后两个数的位置就行了。如果n是奇数,可以证明1最终会待在他自己的位置上,你可以手动模拟贪心试试。

#include<bits/stdc++.h>
using namespace std;
int t,n;
void solve(){
	if(n%2==1){
		cout<<1<<" ";
		for(int i=2;i<=n;i++){
			if(i%2==0)cout<<i+1<<" ";
			else cout<<i-1<<" ";
		}
	}else{
		for(int i=1;i<=n;i++){
			if(i%2!=0)cout<<i+1<<" ";
			else cout<<i-1<<" ";
		}
	}
	cout<<endl; 
}
int main(){
	cin>>t;
	while(t--){
		cin>>n;
		solve();
	}
	return 0;
} 

啊啊啊啊啊啊啊啊数论啊我学了整整一个学期的数论啊全都白学了啊啊啊啊呜呜呜呜呜呜呜呜

数论是我在浩如烟海的OI中唯一可以称得上比较擅长的版块(其实也就只会积性函数那一块的,同余组合计数矩阵乘法一窍不通)

zxy,sto,zxy,orz,tql,%%%

xqy要想不被zxy吊打,或者是说,要想吊打zxy,只能从cf下手。zxy要想不被zex吊打,或者是说,吊打zex,只能从abc下手。zex要想不被xqy和zex吊打,或者是说,要想吊打xqy和zxy,他从哪里下手都行。

zxy的高光时刻

(为什么没有xqy呢?原来xqy不会abc的A和B)


这两场比赛也证明了一点,xqy现在div2可以切两道了,而且不再需要在线求助。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值