Codeforces Round #447 (Div. 2) A,B

 A题 链接:http://codeforces.com/contest/894/problem/A

 

 题意:(水题) 找一个字符串中有多少个“QAQ”,"QAQ"可以不是几何相邻的,但是必须满足逻辑相邻。

 题解:直接暴力三重循环就可以找到答案了(字符串的长度才100)。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     char s[110];
 6     scanf("%s",s);
 7     int lens=strlen(s);
 8     int ans=0;
 9     for(int i=0; i<lens; i++)
10     {
11         if(s[i]=='Q')
12         {
13             for(int j=i+1; j<lens; j++)
14             {
15                 if(s[j]=='A')
16                 {
17                     for(int k=j+1;k<lens;k++)
18                         if(s[k]=='Q')
19                             ans++;
20                 }
21 
22             }
23         }
24     }
25     printf("%d\n",ans);
26     return 0;
27 }
View Code

 

 B题链接:http://codeforces.com/contest/894/problem/B

 题意:(数论)n*m的方格中填写数字,使他们的每行、每列中的元素乘积为k(k为-1||1),因此方格中填写的数字只能是1||-1。

    对于每一个方格,只要改变每行、每列的最后一个方格都可以改变他们的乘积,从而达到题目要求,剩余的(n-1)*(m-1)的

    方格就有2^((n-1)*(m-1))种情况;注意有一种特殊情况,当n与m一个为偶数一个为奇数且k=-1时,至少存在一行或者一列

    的数乘积为1,是无法满足题意得。

 题解:换言之这道题就是快速幂算法,注意(1<=n,m<=10^18),对于2^((n-1)*(m-1))我们应该先求t=2^(n-1),之后再求t^(m-1);因为

   n*m容易超long long。

 

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
ll fast_pow(ll x,ll n)///x^n%mod;
{
    ll t=n;
    ll ans=1;
    while(t)
    {
        if(t%2)
            ans=ans*x%mod;
        x=x*x%mod;
        t=t/2;
    }
    return ans;
}
int main()
{
    ll n,m,k;
    cin>>n>>m>>k;
    if(n%2!=m%2&&k==-1)
        cout<<"0"<<endl;///一个奇数一个偶数且k=-1是无法满足题意要求的。
    else {
        ll ans=fast_pow(fast_pow(2,(n-1)),(m-1));///这里也要注意一下,不能这样求:fast_pow(2,((n-1)*(m-1)),会超long long
    cout<<ans<<endl;
    }

    return 0;
}
View Code

今天就几道题吧,感觉还是很有成就感到,加油!~~~!不要轻易放弃啊1

posted @ 2017-12-03 17:59  孟加拉国  阅读(150)  评论(0编辑  收藏  举报