zoukankan      html  css  js  c++  java
  • 弱校联盟10.3

    Problem A。 Best Matched Pair

    找出最大的每一位递增1的一对乘积,$n^2$枚举

    #include<bits/stdc++.h>
    using namespace std;
    int n,a[2000],ans=-1;
    bool ck(int a){
        int b=-1;
        while(a){
            int t=a%10;//23456
            a/=10;
            if(b!=-1&&t!=b-1)return 0;
            b=t;
        }    
        return 1;
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
                scanf("%d",&a[i]);
        for(int i=1;i<=n;i++)
            for(int j=i+1;j<=n;j++)
                if(ck(a[i]*a[j]))
                    ans=max(ans,a[i]*a[j]);
        printf("%d",ans);
    }

    Problem B。 Help the Princess!

    公主能否逃到出口且不被士兵们赶上。

    从出口bfs,如果出口离公主比离任意一个士兵近,则可以逃出。

    #include<bits/stdc++.h>
    #define N 205
    using namespace std;
    int n,m;
    char mp[N][N];
    int dx[6]={0,0,1,-1};
    int dy[6]={1,-1,0,0};
    int sod=-1,pri;
    int vis[N][N];
    struct node{int x,y,d;}q[50000];
    void bfs(){
        int l=0,r=0;
        while(l<=r){
            node k=q[l++];
            if(mp[k.x][k.y]=='$' && sod==-1) sod=k.d;
            if(mp[k.x][k.y]=='@') pri=k.d;
            for(int i=0;i<4;i++)
            {
                node p=(node){k.x+dx[i],k.y+dy[i],k.d+1};
                if(p.x>=0 && p.x<n && p.y>=0 && p.y<m){
                    if(mp[p.x][p.y]!='#' && !vis[p.x][p.y]) {
                        q[++r]=p;
                        vis[p.x][p.y]=1;
                    }
                }
            }
        }
    }
    int main(){
        scanf("%d%d ",&n,&m);
        
        for(int i=0;i<n;i++){
            char s[1000];
            cin.getline(s,1000);
            for(int j=0;s[j];j++){
                mp[i][j]=s[j];
                if(s[j]=='%')q[0]=(node){i,j,0},vis[i][j]=1;
            }
        }
        bfs();
        if(sod!=-1 && sod<=pri)puts("No");
        else puts("Yes");
    }

    Problem D。 Parentheses

    问你需要交换t次即可匹配正确的长度最小、字典序最小的括号序列。

    n对括号最多需要1+2+..+n次交换,当它是)))..(((的形式时,)))(((需要6次,然后把中间两个交换一下,))()((就还需要5次,再交换一次靠近左边的)(,变成了)())((就需要4次,而3次,只要2对括号。

    t次交换,先找出需要多少对括号,然后先给它)))...(((的形式,然后交换s-(p-t)(比如5次交换,就是3-(6-5)=2)和s.

    #include<bits/stdc++.h>
    #define N 1000000
    using namespace std;
    int t,s,p;
    char a[N];
    int main(){
        scanf("%d",&t);
        for(s=1;p<t;s++)p+=s;
        s--;
        for(int i=0;i<s;i++)a[i]=')',a[i+s]='(';
        swap(a[s],a[t-p+s]);
        printf("%s",a);
    }

      

  • 相关阅读:
    正则学习笔记 主要是C#或Javascript
    禁止页面复制、保存等常用js命令
    Webkit几个CSS效果和JS控制
    marquee用法的详细解释让文字动起来
    js比较两个时间的大小
    关于System.MissingMethodException
    Windows mobile XmlTextWriter FileStream 路径问题
    jQuery UI插件sortable中文帮助文档
    asp.net中用Eval绑定时间的格式
    jQuery图表插件Flot
  • 原文地址:https://www.cnblogs.com/flipped/p/5938175.html
Copyright © 2011-2022 走看看