文章目录
L. Recover Statistics(签到)
J. Grand Prix of Ballance(模拟签到)

struct Node{
int val,id;
bool operator<(const Node&tmp)const{
if(val!=tmp.val)return val>tmp.val;
return id<tmp.id;
}
};
void solve(){
int n,m,q;
cin>>n>>m>>q;
vector<int> cnt(n+1,m),ans(m+1);
map<int,bool> mp[n+1];
int now=0;
while(q--){
int op,x,y;
cin>>op>>x;
if(op==1){
now=x;
continue;
}
cin>>y;
if(now!=y)continue;
if(mp[y].count(x))continue;
if(op==2)ans[x]+=cnt[y]--;
mp[y][x]=1;
}
vector<Node> node;
for(int i=1;i<=m;i++)node.push_back({
ans[i],i});
sort(node.begin(),node.end());
for(auto [x,y]:node)cout<<y<<" "<<x<<"\n";
}
A. Arrow a Row(构造)

int main()
{
int t;cin>>t;
while(t--){
vector< pair<int,int> >ans;
string s;
cin>>s;
int n=s.length();
int f=0;
for(f=n-1;s[f]=='>'&&f>=0;f--);
if(s[0]=='-'||n-f<4||f<0){
puts("No");
continue;
}
for(int i=n-1;i>=f+3;i--) ans.push_back(make_pair(1,i+1));
for(int i=1;i<=f;i++){
if(s[i]=='>') ans.push_back(make_pair(i+1,f+4-i));
}
printf("Yes %d\n",ans.size());
for(int i=0;i<ans.size();i++) printf("%d %d\n",ans[i].first,ans[i].second);
}
return 0;
}
B. Athlete Welcome Ceremony(线性dp)


- 很经典的线性dp,定义 f i , j , k , 0 / 1 / 2 f_{i,j,k,0/1/2} fi,j,k,0/1/2表示考虑前 i i i位,问号中有 j j j个 a a a, k k k个 b b b,当前选 a / b / c a/b/c a/b/c的方案数
- 然后询问的话做一个三维前缀和
- 复杂度 O ( n 3 + q ) O(n^3+q) O(n3+q)
- 复盘:以后写滚动数组再也不另开空间了,在这题直接tle了
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define LL long long
#define F first
#define S second
#define TR tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>
// typedef pair<int,int> PII;
const int N=1e6+10,M=3e4+10;
// const int INF=1e18;
// const int mod=998244353;
const int mod=1e9+7;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
void add(LL &x,LL y){
x+=y;
if(x>=mod)x-=mod;
}
void sub(LL &x,LL y){
x-=y;
if(x<0)x+=mod;
}
void solve(){
int n,q;
cin>>n>>q;
string s;
cin>>s;
s=" "+s;
vector dp(2,vector (n+1,vector (n+1,vector<LL>(3))));
int cnt=0;
if(s[1]!='?'){
if(s[1]=='a')dp[1][0][0][0]=1;
if(s[1]=='b')dp[1][0][0][1]=1;
if(s[1]=='c')dp[1][0][0][2]=1;
}
else{
cnt++;
dp[1][1][0][0]=1;
dp[1][0][1][1]=1;
dp[1][0][0][2]=1;
}
for(int i=2;i<=n;i++){
if(s[i]=='?')cnt++;
for(int j=0;j<=cnt;j++){
for(int k=0;k+j<=cnt;k++){
for(int x=0;x<3;x++)dp[i&1][j][k][x]=0;
}
}
for(int j=0;j<=cnt;j++){
for(int k=0;k+j<=cnt;k++){
for(int x=0;x<3;x++){
if(

最低0.47元/天 解锁文章
1204

被折叠的 条评论
为什么被折叠?



