Codeforces Round 928 (Div. 4)
A. Vlad and the Best of Five
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5;
void solve()
{
string ch;
int sum1 = 0, sum2 = 0;
cin >> ch;
for(int i = 0; i < ch.size(); i++)
{
if(ch[i] == 'A')
sum1++;
else
sum2++;
}
if(sum1 > sum2)
cout <<"A" << endl;
else
cout << "B" <<endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int t;
cin >> t;
while(t--)
solve();
return 0;
}
B. Vlad and Shapes
题意:给出一个图形,判断它是三角形还是正方形
题解:因为只有三角形和正方形两种图形,我们只需要判断它如果有两条边不相等就是三角形即可
代码:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5;
void solve()
{
// string ch;
int n,a[505];
cin >> n;
for(int i = 1; i <= n; i++)
{
int sum = 0;
string ch;
cin >> ch;
for(int j = 0; j < ch.size(); j++)
{
if(ch[j] == '1')
sum++;
}
a[i] = sum;
}
int find = 1;
for(int i = 1; i < n; i++)
{
// cout << a[i] << endl;
if(a[i] == 0)
continue;
if(a[i] != a[i + 1] && a[i] > 0 && a[i+1] > 0)
find = 0;
}
if(find == 0)
cout <<"TRIANGLE" << endl;
else
cout <<"SQUARE" << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int t;
cin >> t;
while(t--)
solve();
return 0;
}
C. Vlad and a Sum of Sum of Digits
题意:给出一个数组,将其中每个数都拆开(例如11 = 1 + 1 为2),之后将每个数相加,求结果
题解:这个题可以用前缀和的思想做,在读入数据的同时将每个数拆开记录进前缀和数组中,最后输出即可
代码:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5;
int flag = 1;
int sum[N+10];
void re_solve()
{
int he = 0, t = flag;
while(t != 0)
{
he += (t % 10);
t /= 10;
}
sum[flag] = he + sum[flag-1];
flag++;
}
void solve()
{
int a;
cin >> a;
cout << sum[a] << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int t;
cin >> t;
int m = 2e5;
while(m--)
re_solve();
while(t--)
solve();
return 0;
}
D. Vlad and Division
题意:给出n个十进制整数,进行分组,一个组中的任意两数的对应31位二进制必须均不相同,最少分多少组
题解:如果可以配对的话,两个数异或值为1。读入每个数字出现的次数,然后对n个数分组,如果这个数出现了0次直接跳过。出现一次就至少有一个新组,计数–。最后看有没有匹配的数,因为可以使得总的组数更少,判断是否存在,并且这个数量不能为0;
代码:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5;
const int maxint = 2147483647;
int a[N];
void solve()
{
map<int,int>cnt;
int n,ans = 0;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> a[i];
cnt[a[i]]++;
}
for(int i = 1; i <= n; i++)
{
if(cnt[a[i]] == 0)
{
continue;
}
ans += 1;
cnt[a[i]] -= 1;
if(cnt[a[i] ^ maxint] != 0)
{
cnt[a[i] ^ maxint]--;
}
}
cout << ans << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int t;
cin >> t;
while(t--)
solve();
return 0;
}