『题解』 P1403 【[AHOI2005]约数研究】
某有银用DP吗???
其实这道题用来学习DP(动态规划)也挺好的
先创个数组a[i]用于存储每个数的约数
1int a[1000000];
再将i从1枚举到n
1for(int i=1;i<=n;i++)
而且,可以从i的枚举i的倍数,且i绝对为i的倍数的约数
So。。。可设个变量j获得i的j倍
而且向前填数组的时候要注意i*j<=n即可
最后,1也算约数,所以a[i]++;
代码奉上
12345678910111213141516171819#include<bits/stdc++.h>using namespace std;int a[1000000],n,sum;int main(){ cin>>n; for(int i=1;i<=n;i++) { int j=2; while(j*i<=n) { a[j*i]++; j++; } a[i]++; } for(int i=1;i<=n;i++)sum+=a[i]; cout<<sum;}
『题解』 P1087 【FBI树】
不用那么麻烦
做个函数判断类型,再按照“左右根"的顺序分解即可
直接上代码吧
12345678910111213141516171819202122#include<bits/stdc++.h>using namespace std;string tree;int n;char get_kind(string x)//获得FBI类型 { if(x.find('0')!=x.npos&&x.find('1')!=x.npos)return 'F'; //find判断是不包含子串要用!=x.npos的形式( x.npos即为没有找到) else if(x.find('0')!=x.npos)return 'B'; else return 'I';}void def(string tree)//“左右根”分解 { if(tree.length()==1){cout<<get_kind(tree);return;} def(tree.substr(0,tree.length()/2));//左 def(tree.substr(tree.length()/2));//右 cout<<get_kind(tree);//根 }int main(){ cin>>n>>tree; def(tree);}
『题解』 P1781 【宇宙总统】
标准答案(用sort+string)
先看长度,再用string的比较
12345678910111213141516171819202122232425262728#include<bits/stdc++.h>using namespace std;struct president{ string price; int n;}a[100];int m;bool cmp(president x,president y);int main(){ cin>>m; for(int i=1;i<=m;i++) { cin>>a[i].price; a[i].n=i; } sort(a+1,a+m+1,cmp); cout<<a[1].n<<endl<<a[1].price;}bool cmp(president x,president y){ if(x.price.length()!=y.price.length()) return x.price.length()>y.price.length(); else return x.price>y.price;}
『题解』 P1579 【哥德巴赫猜想(升级版)】
好吧。。。感觉挺容易
关于质数的判断,我用了一种很高端的方法,没有见过的可以看一下
其他没有什么好说的。。。直接上代码
123456789101112131415161718192021222324252627282930313233343536373839404142#include<iostream>#include<cmath>using namespace std;int zhi(int);int main(){ int n; cin>>n; for(int a=2;a<=n;a++) { if(zhi(a)) { for(int b=2;b<=n;b++) { if(zhi(b)) { int c=n-a-b; if(zhi(c)) { cout<<a<<" "<<b<<" "<<c; goto end; } } } } } end: return 0;}int zhi(int n){ if(n==2|n==3) return 1; if(n%6!=1&&n%6!=5) return 0; int tmp=sqrt(n); for(int i=5;i<=tmp;i+=6) if(n ...