Codeforces Round #663 (Div. 2)

A

题意

要求给出一个全排列,使得任意的$i<j$,满足$a_i\,\,OR\,\,a_{i+1}...a_{j-1}\,\,OR\,\,a_j \ge j-i+1$。

分析

由于一个数的$OR$肯定不会小于自身,所以只需要按顺序输出就可以了。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const ll maxn=2e5+100;
 5 const ll mod=1e9+7;
 6 ll t,n,m;
 7 int main(){
 8     //freopen("in.txt","r",stdin);
 9     ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
10     cin>>t;
11     while(t--){
12         cin>>n;
13         for(int i=1;i<=n;i++) cout<<i<<' ';
14         cout<<endl;
15     }
16     return 0;
17 }

B

题意

给出一个字符矩阵,$R$代表向右走,$D$代表向下走,问至少修改多少个才能对于任意一个起点都能到最右下角。

分析

只要把边界处理好就行。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const ll maxn=2e5+100;
 5 const ll mod=1e9+7;
 6 ll t,n,m;
 7 int main(){
 8     //freopen("in.txt","r",stdin);
 9     ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
10     cin>>t;
11     while(t--){
12         cin>>n>>m;
13         ll res=0;
14         char c;
15         for(int i=0;i<n;i++){
16             for(int j=0;j<m;j++){
17                 cin>>c;
18                 if((j==m-1&&c=='R')||(i==n-1&&c=='D')){
19                     res++;
20                 }
21             }
22         }
23         cout<<res<<endl;
24     }
25     return 0;
26 }

C

题意

挺多的我就不说了

分析

这个数据量估摸着是递推,对于$a_{n-1}$可以证明在任意位置插入均可,所以先有$n \cdot a_{n-1}$;然后对于之前没有成圈的,只要最终放的位置不是首位或者尾部就可以成圈(别问,问就是碰出来的)

最终得到递推式:

$$
a_n=\left\{ \begin{array}{c}
2,n=3;\\
\left( n-2 \right) \cdot \left( n-1 \right) !+2a_{n-1},n\ge 4\\
\end{array} \right.
$$

预处理阶乘然后取模即可。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const ll maxn=1e6+100;
 5 const ll mod=1e9+7;
 6 ll t,n,m,jie[maxn];
 7 void get(ll n){
 8     jie[1]=1;
 9     for(int i=2;i<=n;i++){
10         jie[i]=jie[i-1]*i%mod;
11     }
12 }
13 int main(){
14     //freopen("in.txt","r",stdin);
15     ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
16     cin>>n;
17     t=2;
18     get(maxn);
19     for(int i=4;i<=n;i++){
20         t=(i-2)*jie[i-1]%mod+2*t%mod;
21         t=t%mod;
22     }cout<<t<<endl;
23     return 0;
24 }

D

题意

给出一个$01$矩阵,要求任意偶数阶的子方阵中的$1$的个数为奇数个,问至少修改多少个位置可以满足条件。

分析

当中没有思路(应该说就是放弃了),结束了以后听同学说只要$min(n,m) \ge 4$就不行了,因为有$4$个二阶子方阵,加起来必为偶数,所以直接输出$-1$;剩下的数据量就小的多了,明天试着做一下吧。

posted @ 2020-08-10 01:37  Zabreture  阅读(162)  评论(3编辑  收藏  举报