算法竞赛之入门经典
清溪浅水
这个作者很懒,什么都没留下…
展开
-
孪生素数
#include #include #include int is_prime(int x){ int i,m; assert(x>=0); if(x==1) return 0; m=floor(sqrt(x)+0.5); for(i=2;i<=m;i++) { if(x%i==0) return 0; } return 1;} int main() {原创 2013-07-25 14:08:54 · 634 阅读 · 0 评论 -
算法设计之勇士都恶龙
有n个头的恶龙,需要雇佣一些骑士把他杀死,有m个骑士可以雇佣,一个能力值为x的骑士可以砍掉恶龙一个直径不超过x的头,且需要支付x个金币,如果雇佣骑士才能砍掉恶龙的所有头,问:需要支付的最少金币是多少?#include #include #include const int N=20005;using namespace std;int main(){ int n;//恶龙的个数原创 2014-01-19 10:23:52 · 670 阅读 · 0 评论 -
算法入门之分金币(求极值)
圆桌旁边有n个人,每个人有一定数量的金币,每个人可以给他左右相邻的人一些金币,最终使每个人的金币数量相等,求出被转手的金币的最小数量#include #include #include #include const int M=1000005;using namespace std;int main(){ int n; long long a[M],c[M]; while(原创 2014-01-19 17:08:12 · 800 阅读 · 0 评论 -
算法入门之突击战(贪心)
有n个部下,每个部下需要完成一项任务,第i个部下需要花费j分钟交代任务,然后会花k分钟完成任务,需要输出完成任务的最短时间#include #include #include using namespace std;struct node{ int j; int k;}Node[10007];int cmp(node a,node b){ //if(a.k>b.k) r原创 2014-01-19 16:41:31 · 1562 阅读 · 0 评论 -
算法入门之正整数排序
给定一个正整数,用最少的操作次序把序列1,2.....n中的所有数变成0,每次操作可从序列中选择一个或多个整数,同时减去一个相同的正整数,n分析:1,2,3,可以把2和3同时减去2,得到1,0,1 1,2,3,4,5,6可以把4,5,6同时减去4,得到0,1,2,也就是说把min(4,5,6)等价于1,2,3,换句话说,f(6)= f(3)+1#include原创 2014-01-20 09:38:43 · 928 阅读 · 0 评论 -
算法入门之移动雕塑
在周长为10000的圆上等距分布着n的雕塑,现在有m个雕塑加入,希望n+m个雕塑在圆周上均匀分布,要求移动的总距离尽量少#include #include #include #include #include #include using namespace std;const int M=10005;int main(){ int n,m; while(scanf("%原创 2014-01-19 19:51:05 · 795 阅读 · 0 评论 -
因子和阶乘
把阶乘n!=1*2*3*4......*n 分解例如 825=3*5*5*11,应表示为(0,1,2,0,1);#include #include using namespace std;int is_prime(int n){ for(int i=2;i*i<=n;i++) { if(n%i==0) return 0;原创 2013-08-03 20:02:19 · 562 阅读 · 0 评论 -
最长回文子串
#include #include #include #define MAXN 5000+10char buf[MAXN],s[MAXN];int p[MAXN];int main(){ int n,m=0,max=0,x,y; int i,j; fgets(buf,sizeof(s),stdin); n=strlen(buf); for(i=0;i<n;i++) {原创 2013-07-25 13:55:00 · 489 阅读 · 0 评论 -
铁轨
某城市有一个铁轨,有n节车厢从A方向驶入车站,你可以借助一个中转站C,驶入C中的车厢必须按照相反的顺序驶出C,在任意时刻只有两种选择:A->C ,C->B。#include using namespace std;const int MAX=1000+10;int main(){ int n; while(cin>>n) { if(n==1)原创 2013-08-04 15:36:33 · 659 阅读 · 0 评论 -
卡片游戏
有一副牌,从第一张牌开始从上往下以此编号1~n,当至少还剩下两张牌的时候:把第一张牌扔掉,然后把新的第一张放到整叠牌的最后,输入n,输出每次扔掉的牌,以及最后剩下的牌#include #include using namespace std;int main(){ int n; queueq; scanf("%d",&n); for(int i=0;i<原创 2013-08-03 20:42:40 · 671 阅读 · 1 评论 -
字母重排
#include #include #include #include #include using namespace std;int n;char word[2000][10];char sorted[2000][10];int cmp(const void*_a,const void*_b){ char* a=(char*)_a; char* b=(cha原创 2013-08-03 16:48:19 · 626 阅读 · 0 评论 -
小学生之进位
#include int main(){ int a,b; while(scanf("%d%d",&a,&b)==2) { if(!a&&!b) return 0; int c=0,ans=0; for(int i=9;i>=0;i--) { c=(a%10+b%10+c)>9?1:0; ans+=c; a/=10; b/=10; }原创 2013-07-29 09:08:11 · 673 阅读 · 0 评论 -
对于大数
#include #include const int maxn=3000;int f[maxn];int main(){ int i,j,n; scanf("%d",&n); memset(f,0,sizeof(f)); f[0]=1; for(int i=2;i<=n;i++) { int c=0; for(int j=0;j<maxn;j++) { i原创 2013-07-29 09:35:29 · 603 阅读 · 0 评论 -
6174问题
题目大体假设一个个位数字都不相同的四位数,把所有的数字从大到小排序后得到a,再从小到大排序后得到b,然后用a-b替换为原来的数,并且继续操作。#include #include using namespace std;int getnext(int x){ int a,b; char s[10]; sprintf(s,"%d",x); int n=s原创 2013-08-03 14:38:48 · 899 阅读 · 0 评论 -
阶乘之和
#include #include int main(){ const int MOD=1000000; int i,j,n,s=0; scanf("%d",&n); for(int i=1;i<=n;i++) { int factorial=1; for(j=1;j<=i;j++) {原创 2013-08-02 09:00:54 · 491 阅读 · 0 评论 -
Tex 括号
#include int main(){ int c,q=1; while((c=getchar())!=EOF) { if(c=='"') { printf("%s",q ? "“":"''"); q=!q; } else printf("%c",c); } return 0;}原创 2013-07-25 14:22:47 · 554 阅读 · 0 评论 -
算法入门之蚂蚁
一根长度为L厘米的木棍上有n个蚂蚁,每个蚂蚁要么朝左爬,要么朝右爬,速度为1厘米/秒,当两只蚂蚁相撞时,二者同时掉头,给出每只蚂蚁的初始位置和朝向,计算T秒之后每只蚂蚁的位置每组数据的第一行输入L,T,n,其中x表示蚂蚁距离木棍的距离,字母表示初始朝向,若T秒之前已经掉下木棍的蚂蚁输出Fell off(turning表示正在碰撞)#include #include #inclu原创 2014-01-19 21:28:11 · 1271 阅读 · 0 评论