标签:cnt 练习赛 overrightarrow int LL long 牛客 y1 95
比赛链接:
https://ac.nowcoder.com/acm/contest/11185
A.Duplicate Strings
思路:
统计的是字母的数量,先存下字符串每个字母的数量,操作 1 就是将现有字母的数量乘上 \(k + 1\),操作 2 输出 \(c\) 的数量。
代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 30, mod = 1e9 + 7;
#define LL long long
string s;
LL n, q, cnt[N], k, op;
char c;
int main(){
cin >> n >> q >> s;
for (int i = 0; i < s.size(); i++)
cnt[s[i] - 'a']++;
while (q--){
scanf("%lld", &op);
if (op == 1){
scanf("%lld", &k);
for (int i = 0; i < 26; i++)
cnt[i] = (cnt[i] * (k + 1)) % mod;
}
else{
cin >> c;
cout << cnt[c - 'a'] << "\n";
}
}
return 0;
}
B.Non-interger Area
思路:
设三个点分别为 \(A(x1, y1),B(x2, y2),C(x3, y3)\),向量的面积就是 \(\frac{1}{2}*\overrightarrow{AB}*\overrightarrow{AC}\),\(\overrightarrow{AB}*\overrightarrow{AC}\) = \(\lvert (x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1) \rvert\)。
我们可以发现,面积是否为整数,与每个点坐标的奇偶性有关系。而每个点坐标的奇偶组合有四种情况(奇奇,奇偶,偶奇,偶偶),所以我们就可以记录每种组合的情况,然后暴力跑三个点所有的情况,计算答案,但是这个答案有重复,所以要除 6。
代码:
#include <bits/stdc++.h>
using namespace std;
#define LL long long
LL n, x, y, cnt[2][2], ans;
int main(){
cin >> n;
for (int i = 1; i <= n; i++){
scanf("%lld%lld", &x, &y);
cnt[x & 1][y & 1]++;
}
for (int x1 = 0; x1 < 2; x1++)
for (int y1 = 0; y1 < 2; y1++)
for (int x2 = 0; x2 < 2; x2++)
for (int y2 = 0; y2 < 2; y2++)
for (int x3 = 0; x3 < 2; x3++)
for (int y3 = 0; y3 < 2; y3++){
LL s = (x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1);
if (s & 1) ans += cnt[x1][y1] * cnt[x2][y2] * cnt[x3][y3];
}
cout << ans / 6 << "\n";
return 0;
}
C.Division
标签:cnt,练习赛,overrightarrow,int,LL,long,牛客,y1,95 来源: https://www.cnblogs.com/Hamine/p/15936133.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。