【stamps】 /* ID: wangqia6 TASK: stamps LANG: C++ */ #include <fstream> #include <iostream> #include <cstring> using namespace std; const long MMAX = 55; const long CMAX = 2000005; long n,m,i,j,data[MMAX],f[CMAX]; ifstream fin ("stamps.in"); ofstream fout ("stamps.out"); int main() { fin >> n >> m; for (i = 0; i < m; i++) fin >> data[i]; memset(f,0x7f,sizeof(f)); f[0] = 0; for (i = 1; i < CMAX; i++) { for (j = 0; j < m; j++) if (data[j] <= i) f[i] = min(f[i],f[i - data[j]] + 1); if (f[i] > n) { fout << i - 1 << endl; break; } } fin.close(); fout.close(); return 0; } 【contact】 /* ID; wangqia6 TASK: contact LANG: C++ */ #include <fstream> #include <string> #include <cstring> #include <algorithm> using namespace std; const long CMAX = 8200; const long xsqr[14] = {1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192}; struct record { long rpt,l,x; string str; }; ifstream fin ("contact.in"); ofstream fout ("contact.out"); string st; long a,b,n,len,i,j,tmp; record list[CMAX]; void initdata() { string ss; fin >> a >> b >> n; st = ""; while (getline(fin,ss)) st += ss; len = st.size(); if (b > len) b = len; for (long i = 0; i < CMAX; i++) list[i].rpt = 0; return; } void make(long num, string st, long len) { string ss (&st[0],&st[len]); list[num].rpt++; list[num].str = ss; list[num].l = len; list[num].x = num; return; } bool comp(const record &a,const record &b) { if (a.rpt > b.rpt) return true; else if (a.rpt < b.rpt) return false; if (a.l < b.l) return true; else if (a.l > b.l) return false; if (a.x < b.x) return true; else return false; } void outitdata() { long tmp = -1,count,ok = 0; for (long i = 0; i < CMAX; i++) if (list[i].rpt != tmp) { ok++; if ((ok > n) || (list[i].rpt == 0)) break; tmp = list[i].rpt; fout << tmp << endl; count = 1; fout << list[i].str; if (list[i + 1].rpt != tmp) fout << endl; } else { count++; if (count != 1) fout << ' '; fout << list[i].str; if ((list[i + 1].rpt != tmp) || (count == 6)) { count = 0; fout << endl; } } return; } int main() { initdata(); for (i = 0; i <= len - a; i++) { if (i + b > len) b--; string ss (&st[i], &st[i + b]); tmp = xsqr[a]; for (j = a - 1; j >=0; j--) if (ss[j] == '1') tmp += xsqr[a - 1 -j]; make(tmp,ss,a); for (j = a ; j < b; j++) { tmp = tmp << 1; if (ss[j] == '1') tmp++; make(tmp,ss,j + 1); } } sort(list,list + CMAX,comp); outitdata(); fin.close(); fout.close(); return 0; } 【factorials】 /* ID: wangqia6 TASK: fact4 LANG: C++ */ #include <fstream> using namespace std; const long NMAX = 5000; ifstream fin ("fact4.in"); ofstream fout ("fact4.out"); long n,f[NMAX],sum = 0,k = 1,i; int main() { fin >> n; for (i = 1; i <= n; i++) { f[i] = i; while (f[i] % 5 == 0) { f[i] /= 5; sum++; } } for (i = 1; i <= n; i++) { if (sum == 0) break; if (! (f[i] & 1)) { f[i] = f[i] >> 1; sum--; } } for (i = 1; i <= n; i++) { k *= f[i]; k %= 10; } fout << k << endl; fin.close(); fout.close(); return 0; } 【spinning wheels】 /* ID: wangqia6 TASK: spin LANG: C++ */ #include <fstream> #include <cstring> using namespace std; ifstream fin ("spin.in"); ofstream fout ("spin.out"); long i,j,k,a,b,sum,v[6],t = 0; bool f[6][365],g[6][365],tmp[365]; bool check_ans() { for (long i = 0; i < 360; i++) if (g[1][i] && g[2][i] && g[3][i] && g[4][i] && g[5][i]) return true; return false; } bool same_ori() { for (i = 1; i <= 5; i++) for (j = 0; j < 360; j++) if (g[i][j] != f[i][j]) return false; return true; } int main() { memset(f,0,sizeof(f)); memset(g,0,sizeof(g)); for (i = 1; i <= 5; i++) { fin >> v[i] >> sum; for (j = 1; j <= sum; j++) { fin >> a >> b; for (k = a; k <= a + b; k++) { f[i][k % 360] = true; g[i][k % 360] = true; } } } while (true) { if (check_ans()) { fout << t << endl; break; } t++; for (i = 1; i <= 5; i++) { for (j = 0; j < 360; j++) tmp[(j + v[i]) % 360] = g[i][j]; for (j = 0; j < 360; j++) g[i][j] = tmp[j]; } if (same_ori()) { fout << "none" << endl; break; } } fin.close(); fout.close(); return 0; }