2019牛客多校第八场 B.Beauty Values,C. CDMA,G. Gemstones

B.Beauty Values

 

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,a,v[100000],ans;
int main(){
   scanf("%lld", &n);
   for (ll i = 1; i <= n; i++){
      scanf("%lld", &a);
      ans += (n-i+1) * (i-v[a]);
      v[a] = i;
      cout << ans << endl;
   }
   printf("%lld\n",ans);
   return 0;
}

C. CDMA

题意:

   求一个矩阵,只包含1和-1 ,使任意两行的对应列乘起来 求和为0;

 1 -1

 1  1

a[1][1] * a[2][1] + a[1][2] * a[2][2] = 0

题解:

   找规律,发现将第一个矩阵向右平移,向下平移,取反后向右下平移,得到下一个矩阵

1  1  1  1
1 -1  1 -1
1 1  -1 -1
1 -1 -1  1

AC代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[1026][1026];
int main(){
	int k = 2;
	a[1][1] = 1; a[1][2] = 1; a[2][1] = 1; a[2][2] = -1;
	while(k < 1024){
		for(int i = 1; i <= k; i++){          // 向右平移
			for(int j = k+1; j <= 2 * k; j++){
				a[i][j] = a[i][j-k];
			}
		}
		for(int i = k+1; i <= 2 * k; i++){   // 向下平移
			for(int j = 1; j <= k; j++){
				a[i][j] = a[i-k][j];
			}
		}
		for(int i = k+1; i <= 2*k; i++){       // 取反后向右下平移
			for(int j = k+1; j <= 2*k; j++){
				a[i][j] = -a[i-k][j-k];
			}
		}
		k = k * 2;
		
	}
	int u;
	cin >> u;
	for(int i = 1; i <= u; i++){
		for(int j = 1; j <= u; j++){
			cout << a[i][j] << " " ;
		}
		cout << endl;
	}
	return 0;
}

G. Gemstones

题意:

   消消乐,三个连续的消掉,(4个也只消3个)

‘‘ATCCCTTG" → ‘‘ATTTG" → ‘‘AG”

题解:

   用一个字符数组模拟栈就好

#include <bits/stdc++.h>
using namespace std;
int main(){
	char a[1000005];
	string s;
	cin >> s;
	int len = s.size(), ans = 0, top = 0;
	for(int i = 0; i < len; i++){
		a[top] = s[i];
		top++;
		if(top >= 3){
			if(a[top-2] == a[top-1] && a[top-1] == a[top-3]){
				ans++;
				top = top - 3;
			}
		}
	}
	cout << ans << endl;
	return 0; 
} 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值