zoukankan      html  css  js  c++  java
  • 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{ egin{array}{c}
    2,n=3;\
    left( n-2 ight) cdot left( n-1 ight) !+2a_{n-1},nge 4\
    end{array} ight.
    $$

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

     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$;剩下的数据量就小的多了,明天试着做一下吧。

  • 相关阅读:
    DataTable 只保留想要的几列
    如何用多个字符串来切分字符串
    用.net 发送邮件
    sqlserver 行列转换
    sql面试题一 学生成绩
    将DataReader转换为DataTable
    C# 如何用多个字符串来切分字符串并去除空格
    SqlServer按时间自动生成生成单据编号
    实验一 Java开发环境的熟悉
    Java学习笔记心得——初识Java
  • 原文地址:https://www.cnblogs.com/Zabreture/p/13467414.html
Copyright © 2011-2022 走看看