涼涼夜色為我思念成河
阿新 • • 發佈:2018-07-31
pow push_back sca tle length uic can size 斐波拉契
想起了前天和我嬌妻深情對唱涼涼,結果這兩天真的透心涼,再也沒有水題給我們做了。
今早上大家集體爆0,然後在我wa+TLE了8發之後,上帝終於被我奮取的精神感動了,給了我一個accepted.
這道題就是斐波拉契數列+快速冪取和+循環節點的計算,首先如果出現f[i]=f[1]&&f[i-1]=f[0]則出現循環,
而對n的模數只有n種可能,故n^2內便出現循環。
故,先求出循環節M,
再求a^b%M,快速冪即可
#include <iostream> #include<map> #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<set> using namespace std; int f[1020100]; int quickpow(unsigned long long a,unsigned long long b,int n) { unsigned long long ans=1,base=a; while(b) { if(b%2==1) { ans=(ans*base)%n; }base=(base*base)%n; b=b>>1; } return ans; } int main() { int t,m; int n; f[0]=0; f[1]=1; unsigned long long a,b; scanf("%d",&m); while(m--) { scanf("%llu%llu%d",&a,&b,&n); if(n==1||a==0) { printf("0\n"); continue; } for(int i=2; i<=n*n; i++) { f[i]=(f[i-1]%n+f[i-2]%n)%n; if(f[i-1]==0&&f[i]==1) { t=i-1; break; } } printf("%d\n",f[quickpow(a%t,b,t)]); } return 0; }
下一道題:
這個題就是對容器的使用,然後註意比較的時候要全部轉換成小寫字母比較,然後它輸出的時候,又要按照字母順序先輸出大寫再輸出小寫,所以還要用一個容器存取它本來的大小寫。
#include <iostream> #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<map> #include<vector> using namespace std; map<string,int> kepa; vector<string> t1,t2; int main() { string s; int i,j; while(cin>>s) { if(s[0]==‘#‘) break; t1.push_back(s); int len=s.length(); for(i=0; i<len; i++) { if(s[i]>=‘A‘&&s[i]<=‘Z‘) { s[i]+=32; } } sort(s.begin(),s.end()); kepa[s]++; } for(i=0; i<t1.size(); i++) { string s1=t1[i]; for(j=0; j<s1.length(); j++) { if(s1[j]>=‘A‘&&s1[j]<=‘Z‘) { s1[j]+=32; } } sort(s1.begin(),s1.end()); if(kepa[s1]==1) { t2.push_back(t1[i]); } } sort(t2.begin(),t2.end()); for(i=0; i<t2.size(); i++) { cout<<t2[i]<<endl; } return 0; }
水逆退散!阿門!
涼涼夜色為我思念成河