P1006:模拟
然而我的同余方程能过样例然而就是WA⊙﹏⊙b
【已查明:扩展欧几里得算法出了很隐蔽的问题】
int exGcd(int x,int y,int& a,int& b) //ax+by=gcd(x,y) { ; b=; return x; } int res=exGcd(y,x%y,a,b); int t=a; a=b; b=t-x/y*b; return res; }
Correct exGcd Code
#include <cstdio> #include <cstring> #include <algorithm> inline int code(char x) { switch(x) { ; ; ; } } inline char decode(int x) { switch(x) { : return '_'; : return '.'; ; } } int K; ; ; char cpt[maxL]; bool input() { scanf("%d",&K); if(!K) return false; return scanf("%s",cpt); } int exGcd(int x,int y,int& a,int& b) //ax+by=gcd(x,y) { ; b=; return x; } int res=exGcd(y,x%y,a,b); int t=a; a=b; b=t-b*x/y; return res; } int mdEq(int a,int b,int m) //ax=b(mod m) { //let ax+km=b int x,k; int g=exGcd(a,m,x,k); x*=(b/g); x%=m; ?x+m:x; } void solve() { int l=strlen(cpt); ;j<l;j++) { int i=mdEq(K,j,l); putchar(decode((i+code(cpt[i]))%apb)); } putchar('\n'); } int main() { while(input()) solve(); ; }
Problem:ZOJ P1006 WA
P1008:DFS,迷之TLE*2
#include <cstdio> #include <cstring> #include <algorithm> ],down[],left[],right[]; ]; ]; int N,Ns; bool input() { scanf("%d",&N); Ns=N*N; if(!N) return false; ;i<=Ns;i++) scanf("%d%d%d%d",up+i,right+i,down+i,left+i); return true; } bool move(int,int); bool dfs(int); inline bool move(int cur,int i) { used[i]=true; fill[cur]=i; )) return true; used[i]=false; return false; } bool dfs(int cur) { ) return true; bool res=false; ; ; ) st|=; ;i<=Ns;i++) if(!used[i]) { ) { res=move(cur,i); if(res) return true; } ) { int& u=fill[cur-N]; if(up[i]==down[u]) { res=move(cur,i); if(res) return true; } } ) { ]; if(left[i]==right[l]) { res=move(cur,i); if(res) return true; } } else { int& u=fill[cur-N]; ]; if(left[i]==right[l] && up[i]==down[u]) { res=move(cur,i); if(res) return true; } } } return false; } int main() { ); freopen("t.in","r",stdin); while(input()) { ++cs; ) printf("\n"); memset(used,,sizeof(used)); printf()?"Possible":"Inpossible"); } ; }
Problem:ZOJ P1008
P2672:DP+Hash优化转移
然而谁**能告诉我为啥会TLE!!( >﹏<。)
#include <cstdio> #include <cstring> #include <algorithm> #include <list> struct Hash { int val; int pos; Hash(int v,int p):val(v),pos(p) {} }; ; ; std::list<Hash> hash[dv+]; typedef std::list<Hash>::iterator Iter; Iter x; int N; int arr[maxN]; short dp[maxN][maxN]; inline void insertHash(int v,int p) { hash[v&dv].push_back(Hash(v,p)); } inline int findHash(int v,int p) { int res=maxN; for(x=hash[v&dv].begin();x!=hash[v&dv].end();++x) if(x->val == v && x->pos > p && x->pos < res) res=x->pos; : res ; } void init() { ;i<=dv;i++) hash[i].clear(); ;i<=N;i++) insertHash(arr[i],i); } bool input() { if(scanf("%d",&N)==EOF) return false; ;i<=N;i++) scanf("%d",arr+i); return true; } void __solve() { init(); ; int s,t; ;i<N;i++) dp[i][N]=; ;j>;j--) ;i;i--) { int f=findHash(arr[j]+arr[i],j); ) dp[i][j]=; ) > ans) { ans=dp[i][j]; s=i; t=j; } } printf("%d\n%d %d ",ans,arr[s],arr[t]); int f; ) { printf("%d ",arr[f]); s=t; t=f; } printf("\n\n"); } void solve() { ) printf(]); ) printf(],arr[]); else __solve(); } #include <ctime> int main() { while(input()) solve(); ; }
Problem:ZOJ P2672 TLE
P3300:迷之WA
#include <cstdio> #include <cstring> #include <algorithm> ]; bool input() { int v; if(scanf("%d",&v)==EOF) return false; memset(cnt,,sizeof(cnt)); ++cnt[v]; ;i<=;i++) { scanf("%d",&v); ++cnt[v]; } return true; } bool dfs(int eye) { bool res=true; ;i<=;i++) if(cnt[i]) { res=false; break; } if(res) return true; ;i<=;i++) ] && cnt[i+]) { --cnt[i]; --cnt[i+]; --cnt[i+]; res|=dfs(eye); if(res) return true; ++cnt[i]; ++cnt[i+]; ++cnt[i+]; } ;i<=;i++) ) { cnt[i]-=; res|=dfs(eye); if(res) return true; cnt[i]+=; } if(!eye) { ;i<=;i++) ) { cnt[i]-=; res|=dfs(eye+); if(res) return true; cnt[i]+=; } } return res; } void solve() { ; ;i<=;i++) { ) ++cnt[i]; else continue; )) { if(ok++) printf(" %d",i); else printf("%d",i); } --cnt[i]; } printf("\n"); } int main() { while(input()) solve(); ; }
Problem:ZOJ P3300 WA