Codeforces Round #137 (Div. 2)

来源:互联网 发布:医疗软件销售招聘天津 编辑:程序博客网 时间:2024/04/30 00:04

Codeforces Round #137 (Div. 2)


掉ranking了,这次cf水成这样,才搞出了两个题,还都不是1Y,彻底无语了


A题 ,多找几个规律看看就知道了,发现,从第k个数到第n个数是个循环,如果循环你的数不样的话就不可能存在,如果循环里的数一样的话,就看从k'向前扫描看第几个数和k不一样那么必须把这个数和这个数一样的的数全部都T掉,所以答案就输出这个数的位置


B题 ,用个代表行 和 列的指针 就行了,每次行或者列交换,只是指针的值 之间的交换


C题,郁闷,我怎么都看不懂c题意,英语太他妈的狗屎了


D题,贪心,先把a数组从小都打排序,把b数组加入集合,从左到右扫面a,然后查找 >= x-a[i]  最小的数,ans++,用multiset实现很方便

#include <iostream>#include <cstdio>#include <cstring>#include <set>using namespace std;const int maxn=100010;int a[maxn];multiset<int> st;multiset<int>::iterator it;int main(){    int n,m,tmp;    while(scanf("%d%d",&n,&m)==2)    {        st.clear();        for(int i=0;i<n;i++) scanf("%d",&a[i]);        for(int i=0;i<n;i++)        {            scanf("%d",&tmp);            st.insert(tmp);        }        int ans=0;        for(int i=0;i<n;i++)        {            it=st.lower_bound(m-a[i]);            if(it!=st.end()) ans++,st.erase(it);        }        printf("1 %d\n",ans);    }    return 0;}

E题  就是赤裸裸的矩阵快速幂,用举证来表明状态和状态之间的转移

#include <cstdlib>#include <iostream>#include <cstdio>#include <algorithm>#include <set>#include <cstring>using namespace std;const int mod=1000000007;typedef long long ll;ll a[52][52],b[52][52],sz;int cal(char c){    if(c>='a'&&c<='z') return c-'a';    else return c-'A'+26;}void mult(ll a[][52],ll b[][52]){    ll tmp[52][52]={0};    for(int i=0;i<sz;i++)    for(int j=0;j<sz;j++)    for(int r=0;r<sz;r++)      tmp[i][j]=(tmp[i][j]+a[i][r]*b[r][j])%mod;    memcpy(a,tmp,sizeof(tmp));}int main(){    ll n;    int k;    char l[3];    while(scanf("%I64d %d %d",&n,&sz,&k)==3)    {         for(int i=0;i<sz;i++)         for(int j=0;j<sz;j++) a[i][j]=1,b[i][j]=(i==j);         for(int i=0;i<k;i++)         {             scanf("%s",l);             int t1=cal(l[0]),t2=cal(l[1]);             a[t1][t2]=0;         }         for(n--;n;n>>=1,mult(a,a))           if(n&1) mult(b,a);         ll ans=0;         for(int i=0;i<sz;i++)         for(int j=0;j<sz;j++)            ans=(ans+b[i][j])%mod;         printf("%I64d\n",ans);    }    return 0;}




原创粉丝点击