//学军OJ首杀撒花!!^_^ #include <iostream> #include <cmath> using namespace std; int main() { long long n; cin>>n; int x=0; while (n%2==0) { ++x; n/=2; } if (x==1) cout<<"2*"; else if (x) { cout<<2<<'^'<<x; if (n!=1) cout<<'*'; } //处理质因数为2的情况 for (int i=3;i<=n;i+=2)//因为偶质数只有2,所以只考虑奇数 { x=0; while (true) { if (n%i==0) { ++x; n/=i; } else { if (x==0) break; if (x==1) cout<<i; else cout<<i<<'^'<<x; if (n!=1) cout<<'*'; break; } } } return 0; }
4
11
2015
11
2015
XJOI 1003 质因数分解
4
1
2015
1
2015
Tyvj 1008 传球游戏
//参考了别人的代码,这种头尾相接的处理十分巧妙 #include <iostream> using namespace std; int n,m,f[32][32]; //f[i][j]表示第i次j拿到球的种数 int main() { cin>>n>>m; f[0][1]=f[0][n+1]=1; //初始化,头和尾接上 for (int i=1;i<=m;++i) { for (int j=1;j<=n;++j) f[i][j]=f[i-1][j-1]+f[i-1][j+1]; f[i][0]=f[i][n]; f[i][n+1]=f[i][1]; //再次处理头尾 } cout<<f[m][1]; return 0; }
4
1
2015
1
2015
Tyvj 1007 排座椅
//敲了一遍就过,开心^_^ #include <iostream> #include <algorithm> using namespace std; int m,n,k,l,d; struct str { int order; //序号 int value; //该行(或列)讲话的人数 str() { value=0; } }row[1000],col[1000]; bool cpv(str a,str b) { return a.value>b.value; //以讲话人数为关键字,显然优先把人多的分开 } bool cpo(str a,str b) { return a.order<b.order; //按照题目要求,按序号从小到大输出 } int main() { cin>>m>>n>>k>>l>>d; for (int i=1;i<m;++i) row[i].order=i; for (int i=1;i<n;++i) col[i].order=i; //初始化序号 for (int i=0,x,y,p,q;i<d;++i) { cin>>x>>y>>p>>q; if (x==p) col[min(y,q)].value++; //若行号相同则在该列说话人数加一,下同 else row[min(x,p)].value++; } sort(row+1,row+m+1,cpv); sort(row+1,row+k+1,cpo); //两边排序后,row[1..k]就是答案,下同 sort(col+1,col+n+1,cpv); sort(col+1,col+l+1,cpo); for (int i=1;i<k;++i) cout<<row[i].order<<' '; cout<<row[k].order<<endl; //注意行尾无空格 for (int i=1;i<l;++i) cout<<col[i].order<<' '; cout<<col[l].order; return 0; }