A - Wrong Answer
模拟题,只需要每次输出 \(0\) 到 \(9\) 内不等于 \(a + b\) 的值就行了。
#include <bits/stdc++.h>
using namespace std;
template<typename T>
T read(T x){T opt = 1, sum = 0;char ch = getchar();while(!isdigit(ch)) {if(ch == '-') opt = -1;ch = getchar();}while(isdigit(ch)){sum = sum * 10 + ch - '0';ch = getchar();}return sum * opt;}
#define read read(0)
int main()
{
int a = read, b = read;
int k = a + b;
if(k == 9) cout << 0;
else cout << k + 1;
return 0;
}
B - Adjacency Matrix
考察了邻接矩阵,每次只要判断 \(a_{i, j}\) 是不是 \(1\),如果是就双向建边,然后逐个输出。
#include <bits/stdc++.h>
using namespace std;
set<int> v[10005];
int main()
{
int n;
cin >> n;
for(int i = 1;i <= n;i ++ ) {
for(int j = 1;j <= n;j ++ ){
int k;
cin >> k;
if(k == 1) {
v[i].insert(j);
v[j].insert(i);
}
}
}
for(int i = 1;i <= n;i ++ ){
for(auto j : v[i]) cout << j << ' ';
cout << endl;
}
return 0;
}
C - 343
我为了速度快点。
直接开始打表。
注意到这题条件很苛刻,\(1\) 到 \(10^{18}\) 不到 \(20\) 个数满足条件,那就直接列出来呗。
打表代码就不放了(因为丢了)直接模拟就行了。
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a[] = {1,8,343,1331,1030301,1367631,1003003001,10662526601,1000300030001,1030607060301,1334996994331,1000030000300001,1033394994933301,1331399339931331};
signed main()
{
int n;
cin >> n;
for(int i = 0;i < 14;i ++ ) {
if(a[i] > n && i != 0){
cout << a[i - 1] << endl;
return 0;
}
}
cout << a[13];
return 0;
}
D - Diversity of Scores
模拟题。
每次更新一个数,用 map 判断是不是新数,新的 cnt++
,如果 map 当前数个数为 \(0\),说明这个数不存在了,cnt--
。
#include <bits/stdc++.h>
#define int long long
using namespace std;
template<typename T>
T read(T x){T opt = 1, sum = 0;char ch = getchar();while(!isdigit(ch)) {if(ch == '-') opt = -1;ch = getchar();}while(isdigit(ch)){sum = sum * 10 + ch - '0';ch = getchar();}return sum * opt;}
#define read read(0)
const int N = 2e5 + 5;
map<int, int> mp;
struct node
{
int time, plus;
}a[N];
int c[N];
int cnt = 1;
signed main()
{
int n = read, T = read;
mp[0] = n;
for(int i = 1;i <= T;i ++ ){
int ai, bi;
cin >> ai >> bi;
if(mp[c[ai] + bi] == 0){
cnt ++ ;
mp[c[ai]] -- ;
// cout << c[ai];
// cout << "----------\n";
if(mp[c[ai]] == 0) cnt -- ;
c[ai] += bi;
mp[c[ai]] ++ ;
}
else {
mp[c[ai]] -- ;
if(mp[c[ai]] == 0) cnt --;
c[ai] += bi;
mp[c[ai]] ++ ;
}
cout << cnt << endl;
}
return 0;
}
E - 7X7X7
先咕着。。
F - Second Largest Query
思路没问题,赛事没 A,先把代码贴着。咕。
\(max\) 表示最大数,\(max_cnt\) 表示最大数出现次数,\(mex\) 表示次大数,\(mex_cnt\) 表示次大数出现次数,用线段树维护。
G - Compress Strings
咕咕咕。
备注:预计 3-9 会补。
标签:opt,cnt,ch,报告,int,sum,read,ABC343,解题 From: https://www.cnblogs.com/Rainypaster/p/18050738