Wannafly Winter Camp 2020-Day6

2022-08-15 12:39:09 浏览数 (1)

手速场 今天是废物

开局挑了个题目 “自闭” 一看 哦 小模拟 这个我学得来 和队友说 有个模拟 我去写了 同时立下flag:前三小时可能没我了 写完后因为傻逼和语文太差被关了半小时 这时候已经写得差不多了 没我啥事了 去想J 然后被关到比赛结束 玄学做法果然不可取 赛后dp补了

6C. 酒馆战棋

最不爱写的题 队友代码

代码语言:javascript复制
#include<bits/stdc  .h>
#define pf printf
#define sc(x) scanf("%d", &x)
#define scs(x) scanf("%s", x)
#define scl(x) scanf("%lld", &x)
#define mst(a,x) memset(a, x, sizeof(a))
#define rep(i,s,e) for(int i=s; i<e;   i)
#define dep(i,e,s) for(int i=e; i>=s; --i)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 1e5   5;
char s[1005];
int main(){
   int _; sc(_); while(_--){
      int n,a,b,c,d; sc(n),sc(a),sc(b),sc(c),sc(d),scs(s);
      int aa=a,bb=b,cc=c,dd=d,mx=0,mn=0; rep(i,0,n){
         if(s[i]=='0'){
            if(dd) dd--,cc  ; else if(cc){ } else if(bb) bb--,aa  ;
         }
         else{
            if(cc) mx  ,cc--; else if(dd) dd--,cc  ;
            else if(aa) aa--,mx  ; else if(bb) bb--,aa  ;
         }
      }
      aa=a,bb=b,cc=c,dd=d; rep(i,0,n){
         if(s[i]=='0'){
            if(cc){ } else if(dd) dd--,cc  ;
            else if(aa){ } else if(bb) bb--,aa  ;
         }
         else{
            if(dd) dd--,cc  ; else if(cc) cc--,mn  ;
            else if(bb) bb--,aa  ; else if(aa) aa--,mn  ;
         }
      } pf("%d %dn",mx,mn);
   }
}
6F. 图与三角形
代码语言:javascript复制
#include<bits/stdc  .h>
#define scl(x) scanf("%lld", &x)
#define rep(i,s,e) for(int i=s; i<e;   i)
using namespace std;
typedef long long ll;
ll n,a,b,c,p,d,ans;
vector<int>vv[5005];
int main(){
   scl(n); scl(a); scl(b); scl(c); scl(p); scl(d);
   rep(i,1,n 1) rep(j,1,n 1) if(i!=j&&(a*(i j)*(i j) b*(i-j)*(i-j) c)%p>d) vv[i].push_back(j);
   rep(i,1,n 1) ans =vv[i].size()*(n-vv[i].size()-1);
   ans=n*(n-1)*(n-2)/6-ans/2; printf("%lldn",ans);
}
6K. 最大权值排列
代码语言:javascript复制
#include<bits/stdc  .h>
#define pf printf
#define sc(x) scanf("%d", &x)
#define rep(i,s,e) for(int i=s; i<e;   i)
using namespace std;
const int maxn = 1e5   5;
int a[maxn];
int main(){
   int n,cnt(1); sc(n); rep(i,1,n 1){
      if(i&1) a[cnt]=i; else a[n-cnt 1]=i,cnt  ;
   } rep(i,1,n 1) pf("%d ",a[i]);
}
6L. 你吓到我的马了.jpg
代码语言:javascript复制
#include<bits/stdc  .h>
#define pf printf
#define sc(x) scanf("%d", &x)
#define scs(x) scanf("%s", x)
#define mst(a,x) memset(a, x, sizeof(a))
#define rep(i,s,e) for(int i=s; i<e;   i)
using namespace std;
char mp[105][105];
int n,m,vis[105][105],ans[105][105];
int dir[8][2]={2,1,2,-1,-2,1,-2,-1,1,2,1,-2,-1,2,-1,-2};
struct node{ int x,y,cnt; }s;
void bfs(){
   ans[s.x][s.y]=0; vis[s.x][s.y]=1;
   queue<node>q; q.push(s); while(!q.empty()){
      node fr=q.front(); q.pop();
      ans[fr.x][fr.y]=fr.cnt; rep(i,0,8){
         node t=fr; t.x =dir[i][0],t.y =dir[i][1],t.cnt  ;
         if(t.x<0||t.y<0||t.x>=n||t.y>=m) continue;
         if(vis[t.x][t.y]||mp[t.x][t.y]=='X') continue;
         if(mp[fr.x dir[i][0]/2][fr.y dir[i][1]/2]=='X') continue;
         q.push(t); vis[t.x][t.y]  ;
      }      
   }
}
int main(){
   sc(n); sc(m); rep(i,0,n){
      scs(mp[i]); rep(j,0,m) if(mp[i][j]=='M') s.x=i,s.y=j,s.cnt=0;
   } mst(ans,-1); bfs();
   rep(i,0,n) rep(j,0,m) pf("%d%c",ans[i][j],j==m-1?'n':' ');
}
6M. 自闭
代码语言:javascript复制
#include<bits/stdc  .h>
#define pf printf
#define sc(x) scanf("%d", &x)
#define scs(x) scanf("%s", x)
#define scl(x) scanf("%lld", &x)
#define mst(a,x) memset(a, x, sizeof(a))
#define rep(i,s,e) for(int i=s; i<e;   i)
#define dep(i,e,s) for(int i=e; i>=s; --i)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 2e5   5;
const int mod = 998244353;
int q[105][15][2]; //计数
int vis[105],ac[105]; //vis这个人有没有交过 ac这个人有没有提交过
int sd[15]; //solved
int wa[105][15];
int main(){
   int n,m,w; sc(n); sc(m); sc(w); rep(i,0,w){
      int x,y,c; sc(x); sc(y); sc(c);
      q[x][y][c]  ; vis[x]  ; if(c){ //如果是ac
         if(q[x][y][0]) wa[x][y]=max(wa[x][y],q[x][y][0]),q[x][y][0]=0;
         ac[x]  ; if(q[x][y][1]==1) sd[y]  ; //不重复计算ac人数
      }
   } rep(i,1,n 1) rep(j,1,m 1) if(q[i][j][0]) wa[i][j]=max(wa[i][j],q[i][j][0]);
   rep(i,1,n 1){
      if(!vis[i]) puts("998244353"); //没提交
      else if(!ac[i]) puts("1000000"); //爆零
      else{
         int ak(1); rep(j,1,m 1) if(!q[i][j][1]) ak=0;
         if(ak) puts("0"); else{
            //4 有人a自己没a  20
            //5 过半人a自己没a  10
            int ans(0); rep(j,1,m 1) if(!q[i][j][1]&&sd[j]){
               ans =20; if(sd[j]>=n/2) ans =10;
            }
            //6 连wa k次  k^2
            //7 连wa k次且没a  k^2 
            rep(j,1,m 1){
               int k=wa[i][j]; k*=k; ans =k;
               if(!q[i][j][1]) ans =k;
            } pf("%dn",ans);
         }
      }
   }
}
6N. 合并!
代码语言:javascript复制
#include<bits/stdc  .h>
#define pf printf
#define sc(x) scanf("%d", &x)
#define rep(i,s,e) for(int i=s; i<e;   i)
using namespace std;
typedef long long ll;
int a[2005];
int main(){
   int n; ll ans(0); sc(n); rep(i,0,n) sc(a[i]); sort(a,a n);
   if(n==1) return pf("%dn",a[0]),0;
   rep(i,0,n-1) ans =1ll*a[i]*a[i 1],a[i 1] =a[i];
   pf("%lldn",ans);
}

补题:

6G. 单调栈
代码语言:javascript复制
#include<bits/stdc  .h>
#define pf printf
#define sc(x) scanf("%d", &x)
#define mst(a,x) memset(a, x, sizeof(a))
#define rep(i,s,e) for(int i=s; i<e;   i)
#define dep(i,e,s) for(int i=e; i>=s; --i)
using namespace std;
int a[105],ans[105];
int main(){
   int _; sc(_); while(_--){
      int n; sc(n); rep(i,0,n) sc(a[i]);
      int cnt(0),pos(0); mst(ans,0); rep(i,1,n 1){
         while(pos<n&&ans[pos]) pos  ;
         if(pos==n) break; if(a[pos]==-1) a[pos]=i;
         dep(j,n-1,pos) if(a[j]==i) ans[j]=  cnt;
      } rep(i,0,n) pf("%d%c",ans[i],i==n-1?'n':' ');
   }
}
6J. K重排列
代码语言:javascript复制
#include<bits/stdc  .h>
#define pf printf
#define sc(x) scanf("%d", &x)
#define scs(x) scanf("%s", x)
#define scl(x) scanf("%lld", &x)
#define mst(a,x) memset(a, x, sizeof(a))
#define rep(i,s,e) for(int i=s; i<e;   i)
#define dep(i,e,s) for(int i=e; i>=s; --i)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 2e5   5;
const int mod = 998244353;
int jc[55],inv[55];
int dp[55],tmp[55];
int q[55][55][55];
int qpow(int x,int y){
   int ans=1; while(y){
      if(y&1) ans=1ll*ans*x%mod; x=1ll*x*x%mod; y>>=1;
   } return ans;
}
int C(int s,int x){
   return 1ll*jc[x]*inv[s]%mod*inv[x-s]%mod;
}
void init(){
   jc[0]=inv[0]=1; rep(i,1,51) jc[i]=1ll*jc[i-1]*i%mod,inv[i]=qpow(jc[i],mod-2);
   rep(i,1,51) rep(j,i,51) rep(k,1,j/i 1) if(k==1) q[i][j][k]=C(i,j);
   else q[i][j][k]=1ll*q[i][j-i][k-1]*C(i,j)%mod;
}
void solve(){
   int n; ll k; sc(n); scl(k); mst(dp,0); dp[0]=1; rep(i,1,n 1){
      if(k%i) continue; memcpy(tmp,dp,sizeof(dp));
      rep(j,0,n 1) for(int t=1,a=jc[i-1];j t*i<=n;  t,a=1ll*a*jc[i-1]%mod)
         dp[j t*i]=(1ll*dp[j t*i] 1ll*tmp[j]*q[i][n-j][t]%mod*a%mod*inv[t])%mod;
   } pf("%dn",dp[n]);
}
int main(){
   init(); int _; sc(_); while(_--) solve();
}
dp

0 人点赞