Educational Codeforces Round 161 (Rated for Div. 2)(A-C)

A:Tricky Template

发散思考如果是小写,则相同,大写,则不同

给出字符串A,B,C,如果要使T匹配A,B,不与C匹配,只需从i开始

A,B两个中如果有一个字符与C相同,并且长度是字符串长度,那么肯定不行,否则可以

#include 
using namespace std;

typedef long long ll;
const int N=2e5+10;
int a[N];
typedef pairpii;

int main(){
	int t;
	cin>>t;
	while(t--){
	  int u;
	  cin>>u;
	  string n,m,t;
	  cin>>n>>m>>t;
	  int flag=0;
      for(int i=0;i

B:Forming Triangles

n 根木棒,编号从 1 到 n 。第 i 根木棒的长度是 2的a[i]次方

选出其中三根,组成三角形

分析一下,如果a,b,c,不等,那么长度必然不满足条件

所以必须有两个相等的数并且如果另一个比他大就不行,比他小就可以

那么可以用map记录每个元素出现次数

大于3的话就是Cn中取三个或者取两个加上比他小的前面的数之和

#include 
using namespace std;

typedef long long ll;
const int N=4e5+10;
int a[N];
typedef pairpii;

int main(){
	int t;
	cin>>t;
	while(t--){
	   int n;
	   cin>>n;
	   mapm;
	   for(int i=0;i=3) res+=(ll)x.second*(x.second-1)*(x.second-2)/6+(ll)pre*(x.second)*(x.second-1)/2;
	   	  else if(x.second==2) {
	   	      res+=pre;  	
		 }
		  pre+=x.second;
	   }
	   cout<

C:Closest Cities

使用前后缀和处理每次只需要求减法即可

#include 
using namespace std;

typedef long long ll;
const int N=4e5+10;
ll a[N],b[N],c[N];


int main(){
	int t;
	cin>>t;
	while(t--){
		
	   int n;
	   cin>>n;
	    for(int i=0;i<=n;i++) b[i]=c[i]=0;
	   for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
	   a[n+1]=1e10;
	   a[0]=1e10;
	   b[1]=b[n]=0;
	   c[1]=c[n]=0;
	   for(int i=1;i<=n-1;i++){
	   	  if(abs(a[i]-a[i-1])>abs(a[i]-a[i+1])) b[i+1]=b[i]+1;
	   	  else b[i+1]=abs(a[i+1]-a[i])+b[i];
	   	  //cout<=2;i--){
	   	  if(abs(a[i]-a[i-1])

你可能感兴趣的:(c++,算法,数据结构)