a.反一下求 a 和 a + c 的数目乘起来就行
void solve(){
int c;
cin >> n >> c;
map <int,int> mp;
set <int> s;
for(int i = 0; i < n; i ++)
{
int x;
cin >> x;
s.insert(x);
mp[x] ++;
}
int ans = 0;
for(auto t: s)
{
if(mp[t] && mp[t + c])
{
ans += mp[t] * mp[t + c];
}
}
cout << ans << endl;
}
b.注意一下0的处理就行
void solve(){
cin >> n;
vector <int> a(n);
int sum = 1;
int sum0 = 0;
for(int i = 0; i < n; i ++)
{
cin >> a[i];
if(a[i] > 0)
sum *= a[i];
sum0 += (a[i] == 0);
}
if(sum0 >= 2)
{
cout << 0 << endl;
return ;
}
else if(sum0 == 1)
{
cout << sum << endl;
return ;
}
int maxn = 0;
for(int i = 0; i < n ;i ++)
{
maxn = max(maxn,sum / a[i] * (a[i] + 1));
}
cout << maxn << endl;
}
c.无需多言
void solve(){
string s;
cin >> s;
if(s == "abc" || s == "bac" || s == "acb" || s == "cba")
cout << "YES" << endl;
else cout << "NO" << endl;
}
d.预处理靶子各个位置上的分数,暴力省脑子
void solve(){
vector <vector <int>> g(11,vector <int> (11));
for(int i = 1; i <= 10; i ++)
for(int j = 1; j <= 10; j ++)
{
if(i >= 5 && i <= 6 && j >= 5 && j <= 6)
{
g[i][j] = 5;
}
else if(i >= 4 && i <= 7 && j >= 4 && j <= 7)
{
g[i][j] = 4;
}
else if(i >= 3 &&i <= 8 && j >= 3 && j <= 8)
{
g[i][j] = 3;
}
else if(i >= 2 && i <= 9 && j >= 2 && j <= 9)
{
g[i][j] = 2;
}
else g[i][j] = 1;
}
int res = 0;
for(int i = 1; i <= 10 ; i ++)
{
for(int j = 1; j <= 10; j ++)
{
char ch;
cin >> ch;
if(ch == 'X') res += g[i][j];
}
}
cout << res << endl;
}
e.从大到小枚举1e9 ~ 0的10的倍数,一旦m大于该数那么与其的差就是答案
void solve(){
cin >> m;
for(int i = 1e9; i >= 0; i /= 10)
{
if(m >= i)
{
cout << m - i << endl;
return ;
}
}
}
f.众所周知x * y 等于gcd(x,y) * lcm(x,y).。 所以我们可以利用x * y 来找一对数然后判断以下他们的gcd是否为x就行。注意一下两数相等是不会有两对的情况。
void solve(){
int x,y;
cin >> x >> y;
int k = y * x;
int sum = 0;
int sk = 0;
for(int i = x; i <= sqrt(k); i ++)
{
if(k % i == 0)
{
int s = __gcd(i,k / i);
if(s == x) {
sk += (i == k / i);
//cout << i << " " << k / i << endl;
sum ++;
}
}
}
cout << sum * 2 - sk << endl;
}
g.神经题
void solve(){
map <int,int> mp;
int x;
for(int i = 0; i < 3; i ++) cin >> x, mp[x] ++;
for(auto [xx,yy]:mp)
if(yy == 1) cout << xx << endl;
}
h.统计出现数量不为3的字母
void solve(){
map <char,int> mp;
for(int i = 0; i < 9; i ++)
{
char c;
cin >> c;
mp[c] ++;
}
for(auto [x,y]:mp)
{
if(x == '?') continue;
if(y != 3) cout << x << endl;
}
}
i.其实就是判断sqrt(sum)是不是整数
void solve(){
int n;
cin >> n;
int sum = 0;
int x;
for(int i = 0; i < n; i ++) cin >> x, sum += x;
int sq = (int) sqrt(sum);
if(sq * sq == sum) cout << "YES" << endl;
else cout << "NO" << endl;
}
j.反着考虑,由于只有CV和CVC,那么将字符串反转就只有VC和CVC了,这样子
只要从头开始判断遇到V就是VC,遇到C就是CVC,然后跳到下一个开头,最后反转一下就行。
void solve(){
cin >> n;
string s;
cin >> s;
map <char,int> mp;
mp['a'] = mp['e'] = 1;
mp['b'] = mp['c'] = mp['d'] = 2;
string res = "";
reverse(s.begin(),s.end());
for(int i = 0;i < n; i ++)
{
if(mp[s[i]] == 1)
{
res += s[i];
res += s[i + 1];
res += '.';
i ++;
}
else {
res += s[i];
res += s[i + 1];
res += s[i + 2];
res += '.';
i += 2;
}
}
res = res.substr(0,res.size() - 1);
reverse(res.begin(),res.end());
cout << res << endl;
}