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 }
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; }
今天就几道题吧,感觉还是很有成就感到,加油!~~~!不要轻易放弃啊1