9.12-13 codeforces Div 2

9.12 Div 2

Dashboard - Codeforces Round 968 (Div. 2) - Codeforces

A. Turtle and Good Strings(首尾不同)

能否将一个字符串,拆成若干个字符串 t i t_i ti 1 ≤ i < j ≤ k 1\le i<j \le k 1i<jk , t i t_i ti的第一个字符,不等于 t j t_j tj的最后一个字符。

思路

怎么拆自己决定,可以尽可能的避免相同。但至少要拆成两个,也就是s[0]和s[s.size()-1]是一定会进行比较,他们肯定不能相同。

代码

void solve()
{
	int n;
	cin>>n;
	string s;
	cin>>s;
	if(s[0]!=s[s.size()-1])
	cout<<"yes\n";
	else
	cout<<"no\n";
}

B. Turtle and Piggy Are Playing a Game 2(min,max变换)

小乌龟:将 a i a_i ai设置为 m a x ( a i , a i + 1 ) max(a_i,a_{i+1}) max(ai,ai+1)

小猪:将 a i a_i ai设置为 m i n ( a i , a i + 1 ) min(a_i,a_{i+1}) min(ai,ai+1)

同时移除 a i + 1 a_{i+1} ai+1

思路

为了使最后留下的数满足希望。

对于小乌龟,每次需要消除min

对于小猪,每次需要消除max

我们要求的是最后留下的数字,不需要考虑消除完, a [ i ] a[i] a[i]将变成多少。因为操作实质就是消除某个数字

反正小乌龟和小猪都按照自己的最优策略走,目的是消除。

先排序,一个从前消一个从后消,最终留下的就是n/2+1

奇数,操作偶数次,留下中间n/2+1

偶数,操作奇数次,留下 n/2+1

代码

void solve()
{
	int n;
	cin>>n;
	fir(i,1,n)
	cin>>a[i];
	sort(a,a+n+1);
	int i=1,j=n;
	cout<<a[n/2+1]<<'\n';
}

C. Turtle and Good Pairs(好对子)

当且仅当存在一个整数 k,令我不解。而我再去深思这个题也没必要了

9.13 Div 2

Dashboard - Codeforces Round 955 (Div. 2, with prizes from NEAR!) - Codeforces

A. Soccer(是否平局)

给出初始比分a,b。最终比分c,d。

有没有可能从未出现过平局

思路

没审清题,以为问的是,能否出现平局

比较a,b分两种考虑

a>b

为什么会出现平局?

后者反超

那我们将大的加分到最大,增大后者反超难度,再比较c,d看能否反超

代码

void solve()
{
	int a,b,c,d;
	cin>>a>>b>>c>>d;
	if(a>b)
	{
		if(c>d) cout<<"yes\n";
		else cout<<"no\n";
	}
	else
	{
		if(c<d)cout<<"yes\n";
		else cout<<"no\n";
	}
}

实质

  1. cin >> a >> b >> c >> d;
  2. ​ cout << ((a < b) == (c < d) ? “YES” : “NO”) << ‘\n’;

某队比分的大小是否具有一致性

B. Collatz Conjecture(k次操作求终值)

  • 将 x 增加 1 ,然后
  • 当数字 x能被 y整除时,再除以 y 。

思路

  • 当x<y时

1→2→…→(y−1)→1→2→…→(y−1)→1→…

[ 1 , y − 1 ] [1,y-1] [1,y1] 中循环,因此

将x归为1,k变为k+x-1

循环周期为y-1

所以x=k%(y-1)+1

  • x ≤ \le y时

在k允许范围内,直接进行y-x%y次加一操作

h=min(k,y-x%y);

通过上述两个优化,求解

代码

void solve()
{	int x,y,k;
	cin>>x>>y>>k;
 	while(x>=y&&k>0)
 	{   int h=min(k,y-x%y);
 		x+=h;
 		k-=h;
 		while(x%y==0)
 		 x/=y;
	}
 	if(x<y)
 	{   k+=x-1;
 		x=k%(y-1)+1;
 	}
	cout<<x<<'\n';
}

实质

找个数字模拟可得,此题不存在规律,而数据范围较大,应该考虑优化。

  1. x<y,循环
  2. x ≤ \le y,跳跃操作

时间复杂度

分析可得,影响循环的主要的是x/=y

所以时间复杂度大致为** l o g y x log_yx logyx**

9.13 总结

打这一段codeforces,感觉非常垃圾

  1. 没看透问题实质
  2. 思维受限
  3. 知识匮乏
  4. 临场发挥能力不好
  5. 纠结细枝末节

这两天Div 2,都只补了2题。昨天又有一种不知道怎么打比赛,怎么做题,无从下手。黑暗中才会生出光明的希望。也不急。

如昨天一般,纠结的意义何在呢,心理安慰?不过是身心俱疲罢了

学而不思则罔,思而不学则殆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值