首页 > 其他 > 详细

服务器编程入门(7)I/O复用

时间:2014-02-26 23:06:44      阅读:563      评论:0      收藏:0      [点我收藏+]

Section 1.1

PROB Broken Necklace

这里也是巧解……

/*
ID:liwei101
PROG:beads
LANG:C++
*/
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <list>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <set>
#define PI acos(-1.0)
#define mem(a,b) memset(a,b,sizeof(a))
#define sca(a) scanf("%d",&a)
#define pri(a) printf("%d\n",a)
#define MM 1000002
#define MN 2005
#define INF 168430090
using namespace std;
typedef long long ll;
int main()
{
    ifstream fin("beads.in");
    ofstream fout("beads.out");
    int n,i,go=0,pre=0,w=0,sum=0;
    string s;
    char c=‘ ‘;
    fin>>n>>s;
    s+=s; //圆圈字符串可以把其变为两个字母串连接,首尾相连即可……
    for(i=0;i<n*2;i++)
    {
        if(s[i]==‘w‘) go++,w++;
        else if(s[i]==c) go++,w=0;
        else
        {
            sum=max(go+pre,sum); //两端项链之和
            pre=go-w;  //左端就是右端减去有字母w的个数
            go=w+1; //右端往前刚开始的个数就是前面有字母w个数加上当前的一个
            w=0;    //w个数重置为0
            c=s[i]; //当前字母
        }
    }
    sum=max(go+pre,sum);
    fout<<(sum>n?n:sum)<<endl;
    return 0;
}






Section 1.2 
PROB Milking Cows

哈希思想……好神……也可以用线段树区间加lazy标记……不过好久不写线段树了,现在基本写不出来了。唉……重新学啊……这里觉得哈希比较爽罢了……

/*
ID:liwei101
PROG:milk2
LANG:C++
*/
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <list>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <set>
#define PI acos(-1.0)
#define mem(a,b) memset(a,b,sizeof(a))
#define sca(a) scanf("%d",&a)
#define pri(a) printf("%d\n",a)
#define MM 1000002
#define MN 2005
#define INF 168430090
using namespace std;
typedef long long ll;
int hash[MM],s[3];
int main()
{
    ifstream fin("milk2.in");
    ofstream fout("milk2.out");
    int n,i,j,a,b,Min=MM,Max=0;
    fin>>n;
    for(i=0; i<n; i++)
    {
        fin>>a>>b;
        b--;
        Min=min(Min,a);
        Max=max(Max,b);
        for(j=a; j<=b; j++)
            hash[j]=1; //把出来过的标记为1
    }
    for(i=Min; i<Max; i+=j)
    {
        for(j=0; hash[i+j]==hash[i]; j++); //这句话就是为什么刚开始得:b--了,如果不减的话,这两句循环都得再减1才行……
        s[hash[i]]=max(s[hash[i]],j); //哈希取址的思想真的太强大了……
    }
    fout<<s[1]<<‘ ‘<<s[0]<<endl;
    return 0;
}


section 1.2  Name That Number
刚开始是想把数字转化为字母接成字符串再在文件中查找的,不过太麻烦了,想想这些题目应该代码都比较少,所以反过来想……
把字母转化成数字不就容易很多了嘛!哎呀……思维确实不能定势啊!
/*
ID:liwei101
PROG:namenum
LANG:C++
*/
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <list>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <set>
#define PI acos(-1.0)
#define mem(a,b) memset(a,b,sizeof(a))
#define sca(a) scanf("%d",&a)
#define pri(a) printf("%d\n",a)
#define MM 1000002
#define MN 2005
#define INF 168430090
using namespace std;
typedef long long ll;
int main()
{
    ifstream fin("namenum.in");
    ofstream fout("namenum.out");
    ifstream dict("dict.txt");
    string s,ss;
    int a[27],flag=1;
    a[‘A‘-‘A‘]=a[‘B‘-‘A‘]=a[‘C‘-‘A‘]=2;
    a[‘D‘-‘A‘]=a[‘E‘-‘A‘]=a[‘F‘-‘A‘]=3;
    a[‘G‘-‘A‘]=a[‘H‘-‘A‘]=a[‘I‘-‘A‘]=4;
    a[‘J‘-‘A‘]=a[‘K‘-‘A‘]=a[‘L‘-‘A‘]=5;
    a[‘M‘-‘A‘]=a[‘N‘-‘A‘]=a[‘O‘-‘A‘]=6;
    a[‘P‘-‘A‘]=a[‘R‘-‘A‘]=a[‘S‘-‘A‘]=7;
    a[‘T‘-‘A‘]=a[‘U‘-‘A‘]=a[‘V‘-‘A‘]=8;
    a[‘W‘-‘A‘]=a[‘X‘-‘A‘]=a[‘Y‘-‘A‘]=9;
    fin>>ss;
    while(dict>>s)
    {
        string sss;
        for(int i=0;i<s.size();i++)
        {
            sss+=a[s[i]-‘A‘]+‘0‘;
        }
        if(sss==ss) {fout<<s<<endl;flag=0;}
    }
    if(flag) fout<<"NONE"<<endl;
    return 0;
}

section 1.2  Palindromic Squares
进制转换,很多没有做关于进制转换的题了,这个题也给了自己一个醒,不然都忘了怎么转换了……
/*
PROG:palsquare
LANG:C++
ID:liwei101
*/
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <list>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#define PI acos(-1.0)
#define mem(a,b) memset(a,b,sizeof(a))
#define sca(a) scanf("%d",&a)
#define pri(a) printf("%d\n",a)
#define f(i,a,n) for(i=a;i<n;i++)
#define F(i,a,n) for(i=a;i<=n;i++)
#define MM 1000002
#define MN 5005
#define INF 1000000007
using namespace std;
typedef long long ll;
char fuck[22]={‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘, ‘G‘, ‘H‘, ‘I‘, ‘J‘};
string convert(int i,int b)
{
    string a;
    while(i)
    {
        a+=fuck[i%b];
        i/=b;
    }
    for(int i=0,j=a.size()-1;i<j;i++,j--)
    {
        char c=a[i];
        a[i]=a[j];
        a[j]=c;
    }
    return a;
}
int cmp(string s)
{
    int i,j;
    for(i=0,j=s.size()-1;i<j;i++,j--)
        if(s[i]!=s[j]) return 0;
    return 1;
}
int main()
{
    ofstream fout("palsquare.out");
    ifstream fin("palsquare.in");
    int i,b;
    fin>>b;
    for(i=1;i<=300;i++)
    {
        string s1=convert(i,b);
        string s2=convert(i*i,b);
        if(cmp(s2)) fout<<s1<<‘ ‘<<s2<<endl;
    }
    return 0;
}



服务器编程入门(7)I/O复用,布布扣,bubuko.com

服务器编程入门(7)I/O复用

原文:http://blog.csdn.net/zs634134578/article/details/19929449

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!