A
题意: 有 n n n票,其中 t t t票投给一个人, a a a票投给另一个人,问剩余的票是不是已经不影响结果了。
题解: t t t和 a a a作差,然后判断差值是否大于 n − t − a n - t - a n−t−a即可。
#include<bits/stdc++.h>
using namespace std;
#define fir first
#define sec second
#define endl "\n"
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll, ll> pll;
const int N = 1e5 + 10, M = N * 2, mod = 1e9 + 7, inf = 0x3f3f3f3f, P = 131;
void solve()
{
int n, t, a;
cin >> n >> t >> a;
if(max(t, a) - min(t, a) > n - t - a)
cout << "Yes" << endl;
else
cout << "No" << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t = 1;
// cin >> t;
while(t --)
solve();
return 0;
}
B
题意: 有 n n n个字符串 s i s_i si,设 M M M为所有字符串的最长字符串的长度。输出 M M M个字符串,要求从第 n n n行开始,每次输出每个字符串的第 j j j个字母,如果某个字符串长度小于 j j j,那么输出 ′ ∗ ′ '*' ′∗′,要求每个输出的字符串不以 ′ ∗ ′ '*' ′∗′结尾。
题解: 输入的时候判找出 M M M,然后模拟就可以了。
#include<bits/stdc++.h>
using namespace std;
#define fir first
#define sec second
#define endl "\n"
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll, ll> pll;
const int N = 1e5 + 10, M = N * 2, mod = 1e9 + 7, inf = 0x3f3f3f3f, P = 131;
void solve()
{
int n;
cin >> n;
vector<string> s(n + 1);
int mx = 0;
for(int i = 1; i <= n; i ++)
cin >> s[i], mx = max(mx, (int)s[i].size());
//找出最大值M
for(int j = 0; j < mx; j ++) //从第0个字符开始,一直到最大M个字符
{
string t;
for(int i = n; i; i --)//从第n行开始找
{
if(s[i].size() > j) //如果当前字符串的长度大于j,就是可以放进去该字符
t.push_back(s[i][j]);
else //不然就放一个*
t.push_back('*');
}
while(t.back() == '*') //当结尾是*,就删除结尾
t.pop_back();
cout << t << endl;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t = 1;
// cin >> t;
while(t --)
solve();
return 0;
}
C
题意: 有一个空数组,给出三种操作,将 x x x放到数组中,删除一个 x x x和有多少个不同的数字。
题解: 操作次数有 2 ∗ 1 0 5 2 * 10 ^ 5 2∗105,那么要求每次操作都是 l o g n logn logn级别的时间,考虑 m a p map map, p y t h o n python python考虑字典,然后按照要求模拟就可以了。
#include<bits/stdc++.h>
using namespace std;
#define fir first
#define sec second
#define endl "\n"
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll, ll> pll;
const int N = 1e5 + 10, M = N * 2, mod = 1e9 + 7, inf = 0x3f3f3f3f, P = 131;
void solve()
{
int q;
cin >> q;
map<int, int> mp;
while(q --)
{
int op;
cin >> op;
if(op == 1)
{
int x;
cin >> x;
mp[x] ++;
}
else if(op == 2)
{
int x;
cin >> x;
mp[x] --;
if(mp[x] == 0)
mp.erase(x);
}
else
cout << mp.size() << endl;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t = 1;
// cin >> t;
while(t --)
solve();
return 0;
}
D
题意: 很抽象的题意,难以描述。
题解: 题意过于抽象,但是如果硬生生模拟也是可以写出来的,但是看一下时间复杂度。 2 ∗ 1 0 5 2 * 10 ^ 5 2∗105次提问,每次 n n n可以为最大值 100 100 100,也就是每次提问,需要枚举 100 ∗ 100 ∗ 100 100 * 100 * 100 100∗100∗100,也就是 1 0 6 10 ^ 6 106,那么配合上提问,就是 2 ∗ 1 0 11 2 * 10 ^ {11} 2∗1011,时间复杂度过于庞大,于是考虑如何优化。仔细观察一下提问,我们发现,可以把题目给的三元组,抽象成 n n n个 n ∗ n n * n n∗n的矩阵,那么对这 n n n个 n ∗ n n * n n∗n的矩阵,依次做二位前缀和,那么在查询的时候,可以优化掉两层,那么时间复杂度就变成了 2 ∗ 1 0 5 ∗ 100 2 * 10 ^ 5 * 100 2∗105∗100,也就是 2 ∗ 1 0 7 2 * 10 ^ 7 2∗107。时间完全足够。
#include<bits/stdc++.h>
using namespace std;
#define fir first
#define sec second
#define endl "\n"
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll, ll> pll;
const int N = 1e5 + 10, M = N * 2, mod = 1e9 + 7, inf = 0x3f3f3f3f, P = 131;
void solve()
{
int n;
cin >> n;
vector<vector<vector<int>>> s(n + 1, vector<vector<int>>(n + 1, vector<int>(n + 1)));
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= n; j ++)
for(int k = 1; k <= n; k ++)
{
cin >> s[i][j][k];
s[i][j][k] = s[i][j - 1][k] + s[i][j][k - 1] - s[i][j - 1][k - 1];
//忽略掉i,只看j和k的话,发现就是二维前缀和的板子
}
int q;
cin >> q;
while(q --)
{
ll ans = 0;
int L, R, l1, r1, l2, r2;
cin >> L >> R >> l1 >> l2 >> r1 >> r2;
for(int i = L; i <= R; i ++)
ans += s[i][l2][r2] - s[i][l1 - 1][r2] - s[i][l2][r1 - 1] + s[i][l1 - 1][r1 - 1];
//还是忽略掉i,其实还是二位前缀和的板子,只不过是n个二维前缀和。
//注意输入的东西,不是l1, r1, l2, r2, 而是l1, l2, r1, r2。
cout << ans << endl;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t = 1;
// cin >> t;
while(t --)
solve();
return 0;
}