Week SP1:2014/11/2

一直拖到现在才写,中间还有几道没看。。

A:Aizu 0009 Prime
Number
:素数筛选,注意可能爆内存!!。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
typedef long long LL;
using namespace std;
#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define CLEAR( a , x ) memset ( a , x , sizeof a )
const int N=1e7;
int vis[N];
void initPrime()
{
    int num = 0, m = sqrt (N + 0.5);
    REPF(i,1,N)   vis[i]=1;
    for (int i = 2; i <= m; ++i)
        if (vis[i] == 1)
            for (int j = i * i; j <= N; j += i) vis[j] = 0;
    vis[1]=0;
    for(int i=2;i<=N;i++)
         vis[i]+=vis[i-1];
//    for(int i=2;i<=10;i++)
//        cout<<"233  "<<sum[i]<<endl;
}
int main()
{
    int n;
    initPrime();
    while(~scanf("%d",&n))
        printf("%d\n",vis[n]);
    return 0;
}

B:Aizu 2224 Save your cat...

C:CF   250A Paper
Work

题意:求最少的连续段是每段的负数个数不超过2。乱搞。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
typedef long long LL;
using namespace std;
#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define CLEAR( a , x ) memset ( a , x , sizeof a )
int a[110],n;
int num[110];
int main()
{
    while(~scanf("%d",&n))
    {
        REPF(i,1,n)
          scanf("%d",&a[i]);
        CLEAR(num,0);
        int cnt=0;
        int l=0;
        int m=0;
        REPF(i,1,n)
        {
            m++;
            if(a[i]<0)
               cnt++;
            if(cnt==2)
            {
                cnt=0;int j;
                for(j=i+1;j<=n;j++)
                {
                    if(a[j]<0)  break;
                    else  m++;
                }
                num[l++]=m;
                i=j-1;
                m=0;
            }
            if(i==n&&cnt==1)  num[l++]=m;
        }
        if(l==0)
        {
            printf("%d\n%d\n",1,n);
            continue;
        }
        printf("%d\n",l);
        REP(i,l)
           printf(i==l-1?"%d\n":"%d ",num[i]);
    }
}

D:CF 126B Password:

题意:求一个最长字串是它的前缀,后缀,和中间的一个字串相同

KMP做法:

#include <iostream>
#include <cstdio>
#include <cstring>
#define LMT 1000005
using namespace std;
int hash[LMT],next[LMT],len;
char str[LMT];
void init(void)
{
    int i=0,j=-1;
    next[0]=-1;
    while(i<len)
    {
        if(j==-1||str[i]==str[j])
        {
            i++;j++;next[i]=j;
        }
        else j=next[j];
    }
    for(i=0;i<len;i++)
    {
//      cout<<"2333   "<<next[i]<<endl;
       hash[next[i]]++;
    }
}
int main()
{
    int i;
    scanf("%s",str);
    len=strlen(str);
    init();
    i=len;
    while(next[i]>0)//对应aaa这种情况
    {
       if(hash[next[i]])
       {
         for(int j=0;j<next[i];j++)
           printf("%c",str[j]);
         printf("\n");
         return 0;
       }
       i=next[i];
    }
    printf("Just a legend\n");
    return 0;
}

F:CF 303 D Biridian Forest

题意:迷宫中到达出口,中间有人决斗,问最少的打架次数.反向BFS即可.

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
typedef long long LL;
using namespace std;
#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define CLEAR( a , x ) memset ( a , x , sizeof a )
const int maxn=1100;
char mp[maxn][maxn];
int val[maxn][maxn];
int dis[maxn][maxn];
int vis[maxn][maxn];
int dr[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int n,m,ex,ey;
void BFS()
{
    pair<int,int>st;
    CLEAR(vis,0);
    vis[ex][ey]=1;
    dis[ex][ey]=1;
    queue<pair<int,int> >q;
    int dd=0x7fffff;
    int num=0;
    q.push(make_pair(ex,ey));
    while(!q.empty())
    {
        st=q.front();
        q.pop();
        if(dis[st.first][st.second]>dd)
            break;
        REP(i,4)
        {
            int xx=st.first+dr[i][0];
            int yy=st.second+dr[i][1];
            if(mp[xx][yy]!='T'&&!vis[xx][yy]&&xx>=0&&xx<n&&yy>=0&&yy<m)
            {
                dis[xx][yy]=dis[st.first][st.second]+1;
                vis[xx][yy]=1;
                if(dis[xx][yy]<=dd)
                    num+=val[xx][yy];
                if(mp[xx][yy]=='S')
                    dd=dis[xx][yy];
                q.push(make_pair(xx,yy));
            }
        }
    }
    printf("%d\n",num);
}
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        REP(i,n)
           scanf("%s",mp[i]);
        CLEAR(val,0);
        REP(i,n)
        {
            REP(j,m)
            {
                if(mp[i][j]=='E')
                {
                    ex=i;
                    ey=j;
                }
                if(mp[i][j]>='0'&&mp[i][j]<='9')
                    val[i][j]=mp[i][j]-'0';
            }
        }
        BFS();
    }
    return 0;
}

G CF 215 D  Hot
Days.

坑题,中间无限爆long
long ,最后考虑极值在两端出取得。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
typedef long long LL;
using namespace std;
#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define CLEAR( a , x ) memset ( a , x , sizeof a )
const int maxn=1e5+100;
LL t[maxn],T[maxn],x[maxn],cost[maxn];
int n,m;
LL solve(int f,LL xx)
{
    int l=1,r=m/xx+(m%xx?1:0);
    LL maxnn;
    if(m<=xx)   maxnn=cost[f];
    else   maxnn=cost[f]+x[f]*m;
    if((LL)r*xx<m)
        maxnn=min(maxnn,(LL)r*cost[f]+((LL)(m-xx*r)+xx)*x[f]);
    else
        maxnn=min(maxnn,(LL)r*cost[f]);
    return maxnn;
}
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
         LL sum=0;
         REPF(i,1,n)
            scanf("%I64d%I64d%I64d%I64d",&t[i],&T[i],&x[i],&cost[i]);
         REPF(i,1,n)
         {
             if(T[i]-t[i]>0)
             {
                LL xx=T[i]-t[i];
                sum+=solve(i,xx);
             }
             else
                sum+=((LL)m*x[i]+cost[i]);
         }
         printf("%I64d\n",sum);
    }
    return 0;
}

I:HDU 1353/POJ 2581  竟然是暴力水题,我一直在在想怎么记录路径。其实开始也想到暴力,最后不敢写。POJ上必须C++交。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
typedef long long LL;
using namespace std;
#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define CLEAR( a , x ) memset ( a , x , sizeof a )

int main()
{
    int num1,num2,num3,num4;
    int a,b,c,d;double x;
    while(~scanf("%lf%d%d%d%d",&x,&num1,&num2,&num3,&num4))
    {
        int n=(int)(x*100);
//        cout<<n<<endl;
        int flag=0;
        for(int i=0;i<=num4;i++)
        {
            for(int j=0;j<=num3;j++)
            {
                for(int k=0;k<=num2;k++)
                {
                    for(int l=0;l<=num1;l++)
                    {
                        if(i+5*j+10*k+25*l==n)
                        {
                            a=l;b=k;c=j;d=i;
                            flag=1;
                            break;
                        }
                    }
                    if(flag)  break;
                }
                if(flag)   break;
            }
            if(flag)  break;
        }
        if(flag)   printf("%d %d %d %d\n",a,b,c,d);
        else   printf("NO EXACT CHANGE\n");
    }
    return 0;
}

J:HDU 1595 find the longest of the shortest

Dijkstra求一遍记录前驱后,拆边记录最大的值。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
typedef long long LL;
using namespace std;
#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define CLEAR( a , x ) memset ( a , x , sizeof a )
const int maxn=1100;
int mp[maxn][maxn];
int vis[maxn],dis[maxn];
int pre[maxn];
int n,m;

void dijkstra(int x)
{
    int pos;
    CLEAR(vis,0);
    REPF(i,1,n)
       dis[i]=mp[1][n];
    dis[1]=0;
//    vis[1]=1;
    REPF(i,1,n)
    {
        pos=-1;
        REPF(j,1,n)
        {
            if(!vis[j]&&(pos==-1||dis[pos]>dis[j]))
                pos=j;
        }
        vis[pos]=1;
        REPF(j,1,n)
        {
            if(!vis[j]&&dis[j]>dis[pos]+mp[pos][j])
            {
                dis[j]=dis[pos]+mp[pos][j];
                if(x)     pre[j]=pos;
            }
        }
    }
}

int main()
{
    int u,v,w;
    while(~scanf("%d%d",&n,&m))
    {
        CLEAR(mp,0x3f3f3f);
//        REPF(i,1,n)  mp[i][i]=0;
        CLEAR(pre,-1);
        while(m--)
        {
            scanf("%d%d%d",&u,&v,&w);
            if(mp[u][v]>w)   mp[u][v]=mp[v][u]=w;
//            cout<<mp[u][v]<<endl;
        }
        dijkstra(1);
//        cout<<"2333  "<<dis[n]<<endl;
        int dd=dis[n];
        for(int i=n;i!=1;i=pre[i])
        {
            int t=mp[i][pre[i]];
//            cout<<"666  "<<endl;
            mp[i][pre[i]]=mp[pre[i]][i]=0x3f3f3f;
            dijkstra(0);
            if(dis[n]>dd)
                dd=dis[n];
            mp[i][pre[i]]=mp[pre[i]][i]=t;
        }
        printf("%d\n",dd);
    }
    return 0;
}
时间: 2024-11-06 03:39:54

Week SP1:2014/11/2的相关文章

2014.11.9心情随笔

嗯不知不觉已经夜深了,父亲与妹妹已经入睡,而我却还守着电脑看教程. 有的时候挺迷茫的,不知道自己做的这一切是为了什么,喜欢编程吗?可我说不出来喜欢它的理由,只是单纯的觉得那一行行的代码能像当初推理一样给我带来快乐,兴奋感. 可有的时候就像老师说的,我不学习不考个好的大学做这一切有什么用呢?人活着这一辈子又是为了什么呢? 是我想太多了么?同龄人该想什么?我才初二呀,有的时候挺憎恨自己为什么想那么多. 找份安稳的工作赚钱糊口养家,这已经是我的目标了,梦想什么的早就扯淡没了. 梦想离我太遥远了吗?忘了

【转载】【知识点总结】NOIP前夕 2014.11.4

2014.11.4 7:33 还有三天半就要NOIP,圈一下要背的知识点: 一.数论 1.素数判断 2.筛法求素数 3.求一个数的欧拉函数值 4.预处理欧拉函数 5.卡塔兰数递推式 6.快速幂(模素数的乘法逆元) 7.GCD 二.图论 1.最短路:①堆dijkstra ②spfa 2.kruscal 最小生成树 3.LCA(块状树) 4.匈牙利算法 5.验证二分图 6.scc缩点 7.拓扑排序 三.动态规划经典题 1.零一背包 2.完全背包 3.分组背包 4.最长上升(不下降)子序列 5.方格取

Notes of Scrum Meeting(2014/11/2)

Notes of Scrum Meeting (2014/11/2) 软件工程项目组Sevens开始项目之后的第一次Scrum Meeting报告 会议时间:2014年11月2日  20:00—20:30 与会人员:金鑫 陈少杰 雷元勇 王迪 高孟烨 邓亚梅 郑培蕾 会议地点:QQ讨论组 会议内容: 1.会议目标 项目给定的时间正式过去一周,我们开始准备的时间有些晚,所以大家在周末的任务是熟悉Android开发环境和开发语言, 为之后两周编写代码打下基础.另外就是确定今后四天的时间里大家的努力方

【知识点总结】NOIP前夕 2014.11.4

2014.11.4 7:33 还有三天半就要NOIP,圈一下要背的知识点: 一.数论 1.素数判断 2.筛法求素数 3.求一个数的欧拉函数值 4.预处理欧拉函数 5.卡塔兰数递推式 6.快速幂(模素数的乘法逆元) 7.GCD 二.图论 1.最短路:①堆dijkstra ②spfa 2.kruscal 最小生成树 3.LCA(块状树) 4.匈牙利算法 5.验证二分图 6.scc缩点 7.拓扑排序 三.动态规划经典题 1.零一背包 2.完全背包 3.分组背包 4.最长上升(不下降)子序列 5.方格取

Grml 2014.11 发布,Linux 发行版

Grml 2014.11 发布,代号为 'Gschistigschasti'.此版本提供最新的 Debian 'testing' 里面的软件包,跟往常一样,更新了硬件支持,修复了之前 Grml 版本的 bug. 新特性: new boot option getfile.retries=... - by specifying a number it controls the number of download retries for the netscript=...; grml2usb - i

虚拟化这八年-【软件和信息服务】2014.11

1998年VMware将IBM大型机应用的虚拟化技术迁移到x86平台,服务器虚拟化开始慢慢走近大众的视野.而中国人真正开始认识服务器虚拟化则始于2006年VMware开始在中国设立办事处.过去的8年是全球虚拟化大发展的八年,也是中国虚拟化奋起直追的八年. VMware于2004年初被EMC以6.25亿美金收购后,整个2004年的营业额也只有2.19亿美金,所以当时的服务器虚拟化整个市场容量还是很小的,难怪当时VMware拼命兜售才找到EMC这样一个买家,也仅仅以2003年营业额6.25倍的价格完

2014.11.27随笔。

哈哈哈哈哈哈. 有些事情,真的扯不清也说不清.我懒得去做解释,现在呢就想一心好好学习编程. 有的莫名火气大,我当初新手询问大神们教导的时候,没一个人搭理我.现在打开一些编程网站或者编程群,都是许多人在问怎么入门,有些人直接问是否有师傅带他们,如果有点闲心我兴许还反问:“如果你自学成功了,你乐意花时间带新手吗?”或者“你开口问别人之前使用百度谷歌了吗?” 11月9日到现在,我是自己自学一步步走过来的,现在才学到数组,因为对二维数组和函数的用法还有点懵,卡在这里研究几天了. 加油,争取这个星期了结数

Scrum Meeting 13 -2014.11.19

最近数据库和编译的实验课也开始了,大家晚上的时间直接被砍掉了大部分. 希望大家能顺利完成项目吧.剩下时间也不多了,如果程序还存在一些特别的问题和需要优化修改的地方也应该考虑留到下阶段进行了. Member Today’s task Next task 林豪森 与其他小组商讨整合问题 检测功能完整性,处理整合问题 宋天舒 测试项目功能实现 处理测试结果并对下阶段修改作建议 张迎春 测试项目功能实现 处理测试结果并对下阶段修改作建议 黄漠源 优化代码结构,添加注释 书写项目说明文档 黄敬博 优化代码

Scrum Meeting 11 -2014.11.17

今天和其他两个小组讨论了关于整合问题,在数据库连接等具体方面上还需要继续商讨. 我们小组内部讨论了,这周还是需要在处理整合的同时做项目整体的测试与改进的. Member Today’s task Next task 林豪森 与其他小组商讨整合问题 与其他小组商讨整合问题 宋天舒 优化代码结构,添加注释 测试项目功能实现 张迎春 修复整合存在的bug 测试项目功能实现 黄漠源 优化代码结构,添加注释 优化代码结构,添加注释 黄敬博 修复整合存在的bug 优化代码结构,添加注释 刘翔宇 优化pdf的