T1
数学问题,考试时没yy出公式,用滚动数组瞎搞了一个\(50\)%的暴力。
暴力代码找不见了,贴正解吧。
#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
#define ll long long
int t;
ll fast(ll a, ll b){
ll ans = 1;
while(b){
if(b&1) ans = (ans*a)%mod;
a = (a*a)%mod;
b >>= 1;
}
return ans%mod;
}
signed main(){
scanf("%d", &t);
for(ll n; t; t --){
scanf("%lld", &n);
if(n == 1){
printf("%d\n", 1);
continue;
}
printf("%lld\n", ((fast(2,n-2)%mod)*((n-1)%mod)+(fast(2,n-1))%mod)%mod);
}
return 0;
}
这里注意快速幂无法处理类似这样的情况\(a=1,b=-1\),这个不难读者自证,所以在\(n==1\)的时候特判一下。
T2
正解贪心。不会。
发现在百分之六十的数据范围内有特殊性质考试时上厕所的时候灵光一现想出来的。真的这是真的!
STL真香啊。
考场代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6+10;
int n, ans = 1<<29, vis[maxn];
set<int> v[maxn];
queue<int> q;
signed main(){
scanf("%d", &n);
for(int i = 1, x, y; i <= n; i ++){
scanf("%d%d", &x, &y);
if(!vis[x]){
vis[x] = 1;
q.push(x);
}
v[x].insert(y);
}
while(q.size()){
int now = q.front(), tmp;
q.pop();
tmp = n - v[now].size();
ans = min(ans, tmp);
}
printf("%d", ans);
return 0;
}
正解:
T3
数据结构题。正解为二分答案+线段树检查是否合法。不会。
直接暴力sort。考试的时候脑抽加了一个脑抽特判导致爆零。本来还以为能跑快一点呢qaq。
考场代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
int i, n, m, p, a[maxn], l[maxn], r[maxn], opt[maxn];
bool cmp(int a, int b){return a > b;}
signed main(){
scanf("%d%d", &n, &m);
for(i = 1; i <= n; ++ i){
scanf("%d", &a[i]);
}
for(i = 1; i <= m; ++ i){
scanf("%d%d%d", &opt[i], &l[i], &r[i]);
}
scanf("%d", &p);
for(i = 1; i <= m; ++ i){
if(opt[i]) sort(a+l[i]+1, a+r[i]+1, cmp);
else sort(a+l[i]+1, a+r[i]+1);
}
printf("%d", a[p]);
return 0;
}
正解:
啊不想写了先咕着qwq