更新中
题目集
poj 2769 Reduced ID Numbers http://poj.org/problem?id=2769 这题算是最基本的同余定理的题目吧,以为时间限定比较宽,所以暴力是行的通的。但是也有坑点:不能定义一个1e6大小的bool 型标记数组还用memset清零,这样时间复杂度就达到1e9的级别了。所以清零技巧成了这个题的重中之重
/************************************************************** Problem:poj 2769 User: youmi Language: C++ Result: Accepted Time:1344MS Memory:1100K ****************************************************************/ //#pragma comment(linker, "/STACK:1024000000,1024000000") //#include<bits/stdc++.h> #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <map> #include <stack> #include <set> #include <sstream> #include <cmath> #include <queue> #include <deque> #include <string> #include <vector> #define zeros(a) memset(a,0,sizeof(a)) #define ones(a) memset(a,-1,sizeof(a)) #define sc(a) scanf("%d",&a) #define sc2(a,b) scanf("%d%d",&a,&b) #define sc3(a,b,c) scanf("%d%d%d",&a,&b,&c) #define scs(a) scanf("%s",a) #define sclld(a) scanf("%I64d",&a) #define pt(a) printf("%d\n",a) #define ptlld(a) printf("%I64d\n",a) #define rep0(i,n) for(int i=0;i<n;i++) #define rep1(i,n) for(int i=1;i<=n;i++) #define rep_1(i,n) for(int i=n;i>=1;i--) #define rep_0(i,n) for(int i=n-1;i>=0;i--) #define Max(a,b) ((a)>(b)?(a):(b)) #define Min(a,b) ((a)<(b)?(a):(b)) #define lson (step<<1) #define rson (lson+1) #define esp 1e-6 #define oo 0x3fffffff #define TEST cout<<"*************************"<<endl using namespace std; typedef long long ll; int n; const int maxn=(int)1e5;//为什么1e5就够了还没搞明白,求大神指点啊,直觉应该开到1e6。。。。。 int flag[maxn]; int a[400]; int main() { //freopen("in.txt","r",stdin); int T_T; scanf("%d",&T_T); for(int kase=1;kase<=T_T;kase++) { sc(n); rep1(i,n) sc(a[i]); int ans=0,bk; while(++ans) { rep0(i,ans) flag[i]=0;//804K 360MS //zeros(flag);//1100K 1344MS 时间复杂度差距实在大的吓人,memset慎用啊 bk=0; rep1(j,n) { if(flag[a[j]%ans]) { bk=1; break; } flag[a[j]%ans]=1; } if(bk==0) break; } pt(ans); } return 0; }
hdu 2035 人见人爱A^B http://acm.hdu.edu.cn/showproblem.php?pid=2035 这个题是个快速幂的题,当然利用的性质是ab==(a%m)(b%m)(mod m)
/************************************************************** Problem:hdu 2035 User: youmi Language: C++ Result: Accepted Time:0MS Memory:1728K ****************************************************************/ //#pragma comment(linker, "/STACK:1024000000,1024000000") //#include<bits/stdc++.h> #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <map> #include <stack> #include <set> #include <ctime> #include <sstream> #include <cmath> #include <queue> #include <deque> #include <string> #include <vector> #define zeros(a) memset(a,0,sizeof(a)) #define ones(a) memset(a,-1,sizeof(a)) #define sc(a) scanf("%d",&a) #define sc2(a,b) scanf("%d%d",&a,&b) #define sc3(a,b,c) scanf("%d%d%d",&a,&b,&c) #define scs(a) scanf("%s",a) #define sclld(a) scanf("%I64d",&a) #define pt(a) printf("%d\n",a) #define ptlld(a) printf("%I64d\n",a) #define rep0(i,n) for(int i=0;i<n;i++) #define rep1(i,n) for(int i=1;i<=n;i++) #define rep_1(i,n) for(int i=n;i>=1;i--) #define rep_0(i,n) for(int i=n-1;i>=0;i--) #define Max(a,b) ((a)>(b)?(a):(b)) #define Min(a,b) ((a)<(b)?(a):(b)) #define lson (step<<1) #define rson (lson+1) #define esp 1e-6 #define oo 0x3fffffff #define TEST cout<<"*************************"<<endl using namespace std; typedef long long ll; int n,m; ll mod_mul(ll a,ll b,ll mod) { ll res=0; a%=mod; while(b) { if(b&1) res=(res+a)%mod; b>>=1; a<<=1; } return res; } ll mod_exp(ll a,ll b,ll mod) { ll res=1; a%=mod; while(b) { if(b&1) res=mod_mul(res,a,mod); b>>=1; a=mod_mul(a,a,mod); } return res; } int main() { //freopen("in.txt","r",stdin); while(~sc2(n,m)&&n+m) { ptlld(mod_exp(n,m,1000)); } return 0; }
hdu 1021 Fibonacci Again http://acm.hdu.edu.cn/showproblem.php?pid=1021 这个题其实可以用性质:
c=a+b,(c mod m)==((a%m)+(b%m))mod m ;
但是呢,因为fibonacci数列非常出名,所以性质也有那么一堆:其中一条便是:fn能被3整除,当且仅当n可以被4整除
于是我们可以观察规律:
n 7的系数 11的系数
0 1 0
1 0 1
2 1 1
3 1 2
4 2 3
5 3 5
6 5 8
7 8 13
8 13 21
9 21 34
10 34 55
.......................
可以发现(7+11)%3==0,所以只要两者的系数差3,那么新的fn%3==0。利用fibonacci数列性质(11的系数分布即为fibonacci数列分布),可得
(n-2)%4==0时,fn%3==0
/************************************************************** Problem:hdu 1021 User: youmi Language: C++ Result: Accepted Time:0MS Memory:1728K ****************************************************************/ //#pragma comment(linker, "/STACK:1024000000,1024000000") //#include<bits/stdc++.h> #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <map> #include <stack> #include <sstream> #include <cmath> #include <queue> #include <string> #include <vector> #define zeros(a) memset(a,0,sizeof(a)) #define ones(a) memset(a,-1,sizeof(a)) #define Max(a,b) (a)>(b)?(a):(b) #define Min(a,b) (a)<(b)?(a):(b) #define sc(a) scanf("%d",&a) #define sc2(a,b) scanf("%d%d",&a,&b) #define rep0(i,n) for(int i=0;i<n;i++) #define rep1(i,n) for(int i=1;i<=n;i++) #define rep_0(i,n) for(int i=n-1;i>=0;i--) #define rep_1(i,n) for(int i=n;i>=1;i--) #define pt(a) printf("%d\n",a) #define lson (step<<1) #define rson (lson+1) #define esp 1e-6 #define oo 0x3fffffff #define TEST cout<<"*************************"<<endl using namespace std; typedef long long ll; int n; int main() { //freopen("in.txt","r",stdin); while(~sc(n)) { if(n%4==2) printf("yes\n"); else printf("no\n"); } return 0; }
不为失败找借口,只为成功找方法