zoukankan      html  css  js  c++  java
  • 喵哈哈村的魔法考试 Round #14 (Div.2) 题解

    喵哈哈村的四月半活动(一)

    题解:

    唯一的case,就是两边长度一样的时候,第三边只有一种情况。

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <algorithm>
    #include <cstring>
    #include <queue>
    #include <vector>
    #include <map>
    #include <cmath>
    #define INF 1000000000
    using namespace std;
    const int MOD = 1234567;
    int x,y;
    int main()
    {
        scanf("%d%d",&x,&y);
        double ans;
        if(x!=y)
        {
            if(x<y)
                swap(x,y);
            ans=sqrt(x*x-y*y);
            printf("%.10f
    ",ans);
        }
        ans=sqrt(x*x+y*y);
        printf("%.10f
    ",ans);
        return 0;
    }
    

    喵哈哈村的四月半活动(二)

    题解:拿一个map或者一个set,来统计这个数是否出现过即可。

    #include<bits/stdc++.h>
    using namespace std;
    
    set<int> S;
    int main(){
        int n;
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            int p;
            scanf("%d",&p);
            if(S.find(p)!=S.end()){
                cout<<"1";
            }else{
                cout<<"0";
            }
            S.insert(p);
        }
        cout<<endl;
    }
    

    喵哈哈村的四月半活动(三)

    题解:转换一下题意,实际上就是问你从(x,y)到(1,1)的最短路是多少。

    这个直接写个spfa就好了。

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <algorithm>
    #include <cstring>
    #include <queue>
    #include <vector>
    #include <map>
    #include <cmath>
    #define INF 1000000000
    using namespace std;
    const int M = 510;
    struct node
    {
        int x,y;
    }q[M*M*10];
    int n,m,n1,m1;
    int dx[5]={0,-1,0,1,0};
    int dy[5]={0,0,1,0,-1};
    int a[M][M],dis[M][M],flag[M][M];
    void bfs(int x,int y)
    {
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                dis[i][j]=INF;
        dis[x][y]=0;
        int l=0,r=0;
        q[++r].x=x;
        q[r].y=y;
        flag[x][y]=1;
        while(l!=r)
        {
            l++;
            if(l>100010)
                l=1;
            node k=q[l];
            flag[k.x][k.y]=0;
            for(int i=1;i<=4;i++)
            {
                node k1;
                k1.x=k.x+dx[i];
                k1.y=k.y+dy[i];
                if(k1.x>=1&&k1.x<=n&&k1.y>=1&&k1.y<=m)
                {
                    if(dis[k1.x][k1.y]>dis[k.x][k.y]+a[k1.x][k1.y]&&a[k1.x][k1.y]!=0)
                    {
                        dis[k1.x][k1.y]=dis[k.x][k.y]+a[k1.x][k1.y];
                        if(!flag[k1.x][k1.y])
                        {
                            flag[k1.x][k1.y]=1;
                            r++;
                            if(r>100010)
                                r=1;
                            q[r]=k1;
                        }
                    }
                }
            }
        }
    }
    int main()
    {
        scanf("%d%d%d%d",&n,&m,&n1,&m1);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                scanf("%d",&a[i][j]);
        bfs(n1,m1);
        if(dis[1][1]==INF||a[1][1]==0)
        {
            printf("-1
    ");
            return 0;
        }
        printf("%d
    ",dis[1][1]);
        return 0;
    }
    

    喵哈哈村的四月半活动(四)

    题解:dp[i][j]表示当前还有i个节点,节点权值和为j的方案数是多少。

    然后转移就好了。

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<string.h>
    #include<bitset>
    #define MOD 10007
    #define N 1010
    #define M 1010
    #define INF (1<<30)
    using namespace std;
    int n,m;
    int mem[N][M];
    int dp(int index,int val){
        if(index==1 && val>0) return 1;
        int tmp=0;
        for(int i=1;i<=val-index+1;i++){
            if(mem[index-1][val-i]==-1) mem[index-1][val-i]=dp(index-1,val-i);
            tmp=(tmp+mem[index-1][val-i])%MOD;
        }
        return tmp;
    }
    int main(){
        scanf("%d%d",&n,&m);
        memset(mem,-1,sizeof(mem));
        printf("%d",dp((m+1)/2,n));
        return 0;
    }
    

    喵哈哈村的四月半活动(五)

    题解:暴力大模拟就好了。。。

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<string.h>
    #include<bitset>
    #define INF (1<<30)
    #define LEN 1010
    #define L 1010
    using namespace std;
    char str[LEN];
    char x[L];
    char flag[1000];
    char t[1000];
    bool vis;
    int main(){
        int n;
        scanf("%d",&n);
        vis=0;
        while(n--){
            if(vis) strcpy(flag,t);
            else scanf("%s",flag);
            if(strcmp(flag,"set")==0){
                scanf("%s",x);
                strcpy(str,x);
                vis=0;
        //		cout<<str<<endl;
                continue;
            }
            if(strcmp(flag,"add")==0){
                int a;
                scanf("%d%s",&a,x);
                char tmp[LEN];
                strcpy(tmp,str+a);
                strcpy(str+a,x);
                int len=strlen(x);
                strcpy(str+a+len,tmp);
                vis=0;
        //		cout<<str<<endl;
                continue;
            }
            if(strcmp(flag,"del")==0){
                int a;
                scanf("%d",&a);
                scanf("%s",t);
                char tmp[LEN];
                if(0<=t[0]-'0' && t[0]-'0'<=9){
                    int len=strlen(t);
                    int b=0;
                    for(int i=0;i<len;i++) b=b*10+(t[i]-'0');
                    if(a==b) {
                        vis=0;
                        continue;
                    }
                    if(a>b) swap(a,b);
                    strcpy(tmp,str+b-1);
                    strncpy(str,str,a);
                    strcpy(str+a,tmp);
                    vis=0;
            //		cout<<str<<endl;
                    continue;
                }
                else {
                    strcpy(tmp,str+a-1);
                    strcpy(str,tmp);
                    vis=1;
            //		cout<<str<<endl;
                    continue;
                }
            }
            if(strcmp(flag,"rev")==0){
                reverse(str,str+strlen(str));
                vis=0;
            }
        //	cout<<str<<endl;
        }
        cout<<str<<endl;
        return 0;
    }
  • 相关阅读:
    Java虚拟机基础
    排序系列之插入排序
    排序系列之冒泡排序
    成为优秀程序员的10个要点
    23个适合Java开发者的大数据工具和框架
    成为一个更优秀的开发者的10种方式
    Mybatis自动生成实体类
    Maven-SSM项目pom.xml配置以及springmvc配置以及mybatis配置及web.xml配置
    SSM项目layui分页实例
    图书管理系统(毕业论文)
  • 原文地址:https://www.cnblogs.com/qscqesze/p/6718677.html
Copyright © 2011-2022 走看看