专业的网站建设科技公司,成都广告公司排名前十名,二手市场网站开发,网站建设实训报告Dashboard - Codeforces Round 745 (Div. 2) - Codeforces
A#xff1a;
答案就是2n!/2,
对于当前满足有k个合法下标的排列#xff0c;就是一个n-k个不合法的下标的排列#xff0c;
所以每一个合法排列都相反的存在一个
对称性
#includebits/stdc.h
using nam…Dashboard - Codeforces Round 745 (Div. 2) - Codeforces
A
答案就是2n!/2,
对于当前满足有k个合法下标的排列就是一个n-k个不合法的下标的排列
所以每一个合法排列都相反的存在一个
对称性
#includebits/stdc.h
using namespace std;
const int N 1e610,mod1e97;
#define int long long
int n,m;
int f[N];
void solve()
{cinn;int res1;for(int i1;i2*n;i){if(i2) continue;resres*i%mod;}coutres%mod\n;
}signed main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int t1;cint;while(t--) solve();
}
B
可以先手完一下
对于一个n
如果mn-1那么这个图直接就不连通了直接false
如果m(n-1)*n/2那么这个图就是完全无向连通图直径最长是1
在这个中间直径最长是2直接在1点用n-1条边连其他点
然后特判啥的就行
#includebits/stdc.h
using namespace std;
const int N 1e610,mod1e97;
#define int long long
int n,m,k;
int f[N];
void solve()
{cinnmk;if(k1||mn*(n-1)/2||mn-1){coutNO\n;return ;}if(n1m0){coutYES\n;return ;} if(k2||k3m!n*(n-1)/2){coutNO\n;return ;}coutYES\n;
}signed main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int t1;cint;while(t--) solve();
}
C
这个题好像蓝桥杯之前写过枚举三条线然后滑动窗口来着
这个题基本一模一样
然后想上下两条线
先想一个问题
因为枚举的是D那么D那条线答案是不用管的因为我们枚举的第三条就是这个嘛
然后想U,如果某个U到D和Ux到D相同答案那么选谁呢其实都一样如果D往下移那么他们要加的公共部分都是一样的就是g[D][L],g[D][R],和D那条线这个都是要加的
如果要求某个[1,D-4]的线到D最小就行
快速统计矩阵的01用二维前缀和即可
#includebits/stdc.h
using namespace std;
const int N 41010,mod1e97;
#define int long long
int n,m,k;
char g[N][N];
int b[N][N];;
int s[N][N];
int row[N][N];
int col[N][N];
int val(int x1,int y1,int x2,int y2){//cinx1y1x2y2;return s[x2][y2]-s[x2][y1-1]-s[x1-1][y2]s[x1-1][y1-1];
}
int getrow(int i,int x,int y){return row[i][y]-row[i][x-1];
}
int getcol(int i,int x,int y){return col[i][y]-col[i][x-1];
}void solve()
{cinnm;for(int i1;in;i){for(int j1;jm;j){cing[i][j];s[i][j]s[i-1][j]s[i][j-1]-s[i-1][j-1](g[i][j]-0);row[i][j]row[i][j-1](g[i][j]-0);col[j][i]col[j][i-1](g[i][j]-0);b[i][j]g[i][j]-0;}}int resn*m;for(int L1;Lm;L){for(int RL3;Rm;R){int tmpn*m;for(int D5;Dn;D){if(b[D-1][L]0) tmp;if(b[D-1][R]0) tmp;tmpval(D-1,L1,D-1,R-1);
int now(R-L-1)-val(D-4,L1,D-4,R-1)3-val(D-3,L,D-1,L)3-val(D-3,R,D-1,R)val(D-3,L1,D-1,R-1);tmpmin(tmp,now);resmin(res,tmpR-L-1-val(D,L1,D,R-1));}}}coutres\n;
}signed main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int t1;cint;while(t--) solve();
} E
如果一个车车进来了
那么
工作区间有[st,stx-1],[stxy,stxyx]....
休息区间有:[stx,stxy-1],[stxyx,stxyxy-1]....
所以在%xy这个区间在休息区间那么就加一
差分如果xy500那么只需要400次就可以遍历完所以需要修改的点
如果xy500,那么维护一个区间大小xy去增加这个i%xy点
即维护一个 xy【0,500】里面每个余数相同的点
分块即可
#includebits/stdc.h
using namespace std;
const int N 2e510,mod1e97;
int n,m,k;
int x[N],y[N];
int a[N];
int s[N];
int thre,ans;
int cnt[510][510];
void update(int st,int k,int v){int aax[k]y[k];int *ccnt[aa];int l(stx[k])%aa;int r(st-1)%aa;if(lr){for(int il;ir;i) c[i]v;}else{for(int i0;ir;i) c[i]v;for(int il;iaa;i) c[i]v;}
}
int query(int x){int res0;for(int i2;ithre;i){rescnt[i][x%i];}return res;
}
void solve()
{cinnm;thresqrt(m);for(int i1;in;i) cinx[i]y[i];for(int i1;im;i){int op,k;cinopk;if(op1){int aax[k]y[k];if(aathre){for(int jix[k];jm;jaa){a[j];if(jy[k]m) a[jy[k]]--;}}else update(i,k,1);s[k]i;}else{int aax[k]y[k];if(aathre){for(int js[k]x[k];jm;jaa){a[j]--;if(ji-1) ans--;if(jy[k]i-1) ans;if(jy[k]m) a[jy[k]];}}else update(s[k],k,-1);}ansa[i];coutansquery(i)\n;}
}signed main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int t1;//cint;while(t--) solve();
}