Educational Codeforces Round 93 (Rated for Div. 2)A-B-C-D

比赛链接:Educational Codeforces Round 93 (Rated for Div. 2)

A.Bad Triangle 思维

题意:n个数从小到大,是否可以挑出三个数不能构成三角形,输出这个三个数的下标,否则输出-1

#pragma GCC optimize(2)
#include<bits/stdc++.h> 
using namespace std;
#define endl "\n"
int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
  int _;cin>>_;
  while(_--){
  	int n,f=0;cin>>n;
  	vector<int>a(n,0);
  	for(int i=0;i<n;i++)cin>>a[i];
  	if(a[0]+a[1]<=a[n-1])f=1;
  	if(f)cout<<1<<" "<<2<<" "<<n<<endl;
  	else cout<<-1<<endl;
  }
   return 0;
} 

B.Substring Removal Game 思维

题意:在01字符串中,两个人每次轮流挑出连续1的子串,两个人都想贪心获得更多的1,问先手的人最多可以获得多少个1
题意:先预处理统计连续1的次数,sort排序后,取奇数位的和。

#pragma GCC optimize(2)
#include<bits/stdc++.h> 
using namespace std;
#define ll long long
#define endl "\n"
int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
  int _;cin>>_;
  while(_--){
  	string s;cin>>s;
  	vector<int>a;
  	int n=s.size(),l=0;
  	for(int i=0;i<n;i++){
  		if(s[i]=='1')l++;
  		else if(s[i]=='0'){
  			if(l>=1)a.push_back(l);
			  l=0;	
		}
	}
	if(l!=0)a.push_back(l);
  	sort(a.begin(),a.end());
  	reverse(a.begin(),a.end());
  	ll ans=0;
  	for(int i=0;i<a.size();i+=2)ans+=a[i];
  	cout<<ans<<endl;
  }
   return 0;
} 

C. Good Subarrays 预处理+前缀和

题意:在长度为n的数组a[]中,求 ∑ i = l r a i = r − l + 1 \sum^r_{i=l}a_i=r-l+1 i=lrai=rl+1种类的个数
题解:字符串输出,预处理成数组,再对该数组每个数都进行减一操作后,再对该数组进行前缀和处理, O ( n ) O(n) O(n)for一遍前缀和,ans等于该前缀和之前出现的次数(预处理-1后的前缀和,0本身就符合直接加一次)并用map统计该前缀和出现的次数。

这道题真的离谱,只能说cf的评测机真的快,加上
#pragma GCC optimize(“Ofast”)
#pragma GCC target(“avx,avx2,fma”)

O ( n 2 ) O(n^2) O(n2)的hack不了,放过了。

#pragma GCC optimize(2)
#include<bits/stdc++.h> 
using namespace std;
#define ll long long
#define endl "\n"
const int MAX=1e6+7;
int change(char x){
	return int(x-'0');
}
ll a[MAX],b[MAX];
int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
  int _;cin>>_;
  while(_--){
  	int n;cin>>n;
  	string s;cin>>s;
  	ll ans=0,l=0,r=0,sum=0;
  	map<ll,ll>mp;
  	for(int i=1;i<=n;i++)a[i]=change(s[i-1])-1;	
	for(int i=1;i<=n;i++)b[i]=b[i-1]+a[i];
  	for(int i=1;i<=n;i++){
  		if(b[i]==0)ans++;
		if(mp[b[i]])ans+=mp[b[i]];
		mp[b[i]]++;
	}
	cout<<ans<<endl;
  }
   return 0;
} 

D. Colored Rectangles 三维dp

题意:有R,G,B三种颜色的棍子,每个中棍子都r,g,b个,每个棍子的长度独立输入的,每次可以需要取两个不同颜色的棍子组成矩形,可以组成多个矩形,问最后这些矩形面积和最大值是多少。
题解:先每个组内大到小排个序,记个 f[i][j][k] 表示第一组考虑前 i 个,第二组考虑前 j 个,第三组考虑前 k 个的最大值,转移比较显然,需要注意的是for是从0开始的。

#pragma GCC optimize(2)
#include<bits/stdc++.h> 
using namespace std;
#define ll long long
#define endl "\n"
const int MAX=1e6+7;
ll f[205][205][205];
int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
   int r,g,b;cin>>r>>g>>b;
   vector<ll>R(r+1,0),G(g+1,0),B(b+1,0);
   for(int i=1;i<=r;i++)cin>>R[i];
   for(int i=1;i<=g;i++)cin>>G[i];
   for(int i=1;i<=b;i++)cin>>B[i];
   sort(R.begin()+1,R.end());reverse(R.begin()+1,R.end());
   sort(G.begin()+1,G.end());reverse(G.begin()+1,G.end());
   sort(B.begin()+1,B.end());reverse(B.begin()+1,B.end());
   ll ans=0;
   for(int i=0;i<=r;i++){
   		for(int j=0;j<=g;j++){
   			for(int k=0;k<=b;k++){
   				if(i!=0&&j!=0)
   				f[i][j][k]=max(f[i][j][k],f[i-1][j-1][k]+R[i]*G[j]);
   				if(j!=0&&k!=0)
   				f[i][j][k]=max(f[i][j][k],f[i][j-1][k-1]+G[j]*B[k]);
   				if(i!=0&&k!=0)
   				f[i][j][k]=max(f[i][j][k],f[i-1][j][k-1]+R[i]*B[k]);
				ans=max(ans,f[i][j][k]);
			}	
		}
   }
   cout<<ans;
   return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"educational codeforces round 103 (rated for div. 2)"是一个Codeforces平台上的教育性比赛,专为2级选手设计评级。以下是有关该比赛的回答。 "educational codeforces round 103 (rated for div. 2)"是一场Codeforces平台上的教育性比赛。Codeforces是一个为程序员提供竞赛和评级的在线平台。这场比赛是专为2级选手设计的,这意味着它适合那些在算法和数据结构方面已经积累了一定经验的选手参与。 与其他Codeforces比赛一样,这场比赛将由多个问题组成,选手需要根据给定的问题描述和测试用例,编写程序来解决这些问题。比赛的时限通常有两到三个小时,选手需要在规定的时间内提交他们的解答。他们的程序将在Codeforces的在线评测系统上运行,并根据程序的正确性和效率进行评分。 该比赛被称为"educational",意味着比赛的目的是教育性的,而不是针对专业的竞争性。这种教育性比赛为选手提供了一个学习和提高他们编程技能的机会。即使选手没有在比赛中获得很高的排名,他们也可以从其他选手的解决方案中学习,并通过参与讨论获得更多的知识。 参加"educational codeforces round 103 (rated for div. 2)"对于2级选手来说是很有意义的。他们可以通过解决难度适中的问题来测试和巩固他们的算法和编程技巧。另外,这种比赛对于提高解决问题能力,锻炼思维和提高团队合作能力也是非常有帮助的。 总的来说,"educational codeforces round 103 (rated for div. 2)"是一场为2级选手设计的教育性比赛,旨在提高他们的编程技能和算法能力。参与这样的比赛可以为选手提供学习和进步的机会,同时也促进了编程社区的交流与合作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值