享受学习

坚持做某一件事,热爱是一个不可缺少的原因。这是真正能提供你源源不断的动力的根本所在。做任何事情也是如此,不是为了争名逐利,只是单纯的享受过程,喜欢某件事情本身,这样即便会带来挫败,也不会让你望而却步或者干脆放弃。

HBTCM寒假第一次积分赛

A – HangOver

题目大意就是求1/2+1/3+…+1/n+1的值大于给的数时,n为多少

代码:

#include<iostream>
#include<cstdlib>
using namespace std;

int main(){
    double n,sum;
    int t;
    while(cin>>n){
        if(n==0) break;
        sum=0;
        for(int i=1;i>=-1;i++){
            if(sum>=n) {cout<<t<<" card(s)"<<endl;break;}
            t=i;
           // cout<<1<<"/"<<t+1<<endl;
            sum+=1.0/(t+1)*1.0;
           // cout<<sum<<endl;
        }
    }
    return 0;
}

B – 回文数

HRBUST – 1280 

题目吐槽:此题不需要文件读入读出…..然后是有一个函数itoa可以方便进制转换,可以自己手写,也可以调用,只是不知道为什么老师只给了g++的编译器,而g++编译器恰好只支持atoi不支持itoa,只好手动copy一份百度itoa代码,原itoa在c++中应存在并且头文件为
<stdlib.h>(C++版本:<cstdlib>)

题目理解:进行进制转换

#include<iostream>
#include <string>
#include <string.h>
#include <cstring>
#include <cstdlib>
using namespace std;


bool huiwen(char *s){
    int len=strlen(s);
    for(int i=0;i<len/2;i++){
        if(s[i]==s[len-i-1]) continue;
        return false;
    }
    return true;
}
bool hanshu(int S){
    int i,coun=0;
    char s[10000];
    for(i=2;i<=10;i++){
        itoa(S,s,i);
        if(huiwen(s)) coun++;
        if(coun==2) return true;
    }
    return false;
}

int main(){
    int N,S,coun=0,t;
    while(cin>>N>>S){
        S++;
        cout<<"Case "<<++coun<<":"<<endl;
        for(int i=0;i<N;i++){
            if(!hanshu(S))
                i--;
            else cout<<S<<endl;
            S++;
        }
    }
    return 0;
}

C – 字数统计

HDU – 1735 

#include<iostream>
#include <string>
#include <string.h>
#include <cstring>
#include <iomanip>
#include <algorithm>
using namespace std;
int s[10000+5][100+5];
int main(){
    int N,L,M,i,j,counM,counD,counO,z,coun;
    int d[10000+5];
    while(cin>>N>>L>>M){
        memset(d,0,sizeof(d));
        counM=counD=counO=0;
        for(i=0;i<N;i++){
            for(j=0;j<L;j++){
                cin>>s[i][j];
                if(s[i][j]==0) counO++;
                if(j==1) {
                    if(s[i][0]==0&&s[i][1]==0) {
                        counM++;
                        if(i!=0){
                            z=L-1;
                            while(s[i-1][z]==0){
                                d[i-1]++;
                                z--;
                            }
                        }
                    }

                }
            }
        }
        z=L-1;
        while(s[i-1][z]==0){
            counO--;
            z--;
        }
        //cout<<counO<<" "<<counM<<endl;
        sort(d,d+N);
        coun=M-1;
        for(i=N-1;i>=N-counM-1;i--){
            if(coun--==0) break;
         //   cout<<d[i];
          //  cout<<d[i]<<endl;
            counO-=d[i];
        }
        cout<<counO-2*M<<endl;
    }



    return 0;
}

D – 最小周长

51Nod – 1283 

#include<iostream>
#include <string>
#include <string.h>
#include <cstring>
#include <iomanip>
#include <algorithm>
#include <cmath>
using namespace std;
int main(){
    int S;
    cin>>S;
    for(int i=(int)sqrt(S);i>=1;i--){
        if(S%i==0) {
           cout<<2*(i+S/i)<<endl;
           break;
        }
    }
    return 0;
}

E – 迷宫城堡

HDU – 1269 

#include<iostream>
#include <string>
#include <string.h>
#include <cstring>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
const int MAXN=100000;
int vis[MAXN];
int dfn[MAXN];
int low[MAXN];
int c_time;
int flag;
vector<int> mp[MAXN];
void tarjan(int u)//tarjan算法
{
    vis[u]=1;
    low[u]=dfn[u]=c_time++;
    for(int i=0; i<mp[u].size(); i++)
    {
        int v= mp [u][i];
        if(vis[v]==0) tarjan(v);    //如何没访问过
        if(vis[v]==1) low[u]=min(low[u],low[v]);    //如果访问过
    }
    if(dfn[u]==low[u])
        flag++;
}
int main(){
    int n,m,x,y;
    while(cin>>n>>m){
        if(n==0&&m==0) break;
        memset(low,0,sizeof(low));  //初始化
        memset(vis,0,sizeof(vis));
        memset(dfn,0,sizeof(dfn));
        for(int i=1; i<=n; i++) mp[i].clear();
        for(int i=0; i<m; i++)
        {
            cin>>x>>y;
            mp[x].push_back(y);
        }
        c_time=1;
        flag=0;
        for(int i=1; i<=n ; i++)
        {
            if(vis[i] == 0)
            {
                tarjan(i);
            }
        }
        if(flag==1)
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;
    }
    return 0;
}

在补了在补了(