Wannafly 第一次群赛总结

【题目地址】http://vjudge.net/contest/142053#overview 

           Wannafly的第一次群赛,最终做了4个比较水的题,剩下两题听了q神解题方法之后还是不会写,自己实在太菜了。然后把这4题总结一下吧,期待下一次群赛!

A。简单搜索,但是需要非常仔细的读题!题意就是一个人开始的时候在迷宫的左端,然后迷宫里面有一些火车,车头向左,并且以2的速度向左开,这个人每次先向右移动一格,然后可以向上或者向下移动,问最后能否不被火车撞到,成功到达另外一边?

【AC代码】

#include <bits/stdc++.h>
using namespace std;
int n, k, sx;
char a[5][105];
typedef pair<int,int> P;
bool bfs(int sx){
    queue<P>q; q.push(P(sx,1));
    while(!q.empty()){
        int x = q.front().first, y = q.front().second; q.pop();
        if(isalpha(a[x][++y])) continue;
        if(y >= n) return true;
        for(int i = -1; i <= 1; i++){
            int dx = x + i;
            if(dx < 1 || dx > 3) continue;
            if(isalpha(a[dx][y]) || isalpha(a[dx][y+1]) || isalpha(a[dx][y+2]) || a[dx][y+2] == 1) continue;
            int dy = y + 2;
            if(dy >= n) return true;
            a[dx][dy] = 1;
            q.push(P(dx,dy));
        }
    }
    return false;
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        memset(a, 0, sizeof(a));
        scanf("%d%d",&n,&k);
        for(int i = 1; i <= 3; i++) scanf("%s",a[i]+1);
        for(int i = 1; i <= 3; i++) if(a[i][1] == 's') sx = i;
        if(bfs(sx)){
            printf("YES\n");
        }
        else{
            printf("NO\n");
        }
    }
    return 0;
}

B。问能否在一个字符串里插入一个字符,使得这个字符串变成回文串?数据小,模拟。。

#include <bits/stdc++.h>
using namespace std;

bool check(string s)
{
    int l = 0, r = s.size()-1;
    while(l <= r){
        if(s[l] != s[r]) return false;
        l++,r--;
    }
    return true;
}
int main()
{
    string s, ss;
    cin>>s;
    ss = "";
    int sz = s.size();
    for(int i = 0; i < 26; i++){
        ss = char(i + 'a') + s;
        if(check(ss)){
            cout<<ss<<endl;
            return 0;
        }
        ss = "";
        ss = s + char(i + 'a');
        if(check(ss)){
            cout<<ss<<endl;
            return 0;
        }
    }
    for(int k = 0; k < 26; k++)
    {
        for(int i = 1; i < sz; i++){
            ss = "";
            for(int j = 0; j < i; j++) ss += s[j];
            ss += char(k + 'a');
            for(int j = i; j < sz; j++) ss += s[j];
            if(check(ss)){
                cout<<ss<<endl;
                return 0;
            }
        }
    }
    cout<<"NA"<<endl;
}

D。在纸上推一推就可以发现,分奇偶答案固定。并且就是样例的两个答案。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    if(n%2==0){
        printf("white\n");
        printf("1 2\n");
    }
    else{
        printf("black\n");
    }
}

F。给了一下表达式,问能否找到一个数满足所有的表达式?

#include <bits/stdc++.h>
using namespace std;
string  a,b,c;
int getnum(string s)
{
    int ans = 0;
    int sg;
    int len = s.size();
    if(s[0] == '-'){
        sg = -1;
        for(int i = 1; i < len; i++) ans = ans * 10 + s[i] - '0';
        return sg*ans;
    }
    else{
        for(int i = 0; i < len; i++) ans = ans * 10 + s[i] - '0';
    }
    return ans;
}
int main()
{
    int n;
    int mx1 = -(1e9+7);
    int mx2 = -(1e9+7);
    int mi1 = 1e9+7;
    int mi2 = 1e9+7;
    cin>>n;
    for(int i = 0; i < n; i++){
        cin>>a>>b>>c;
        if(c == "Y")
        {
            if(a == ">") mx1 = max(mx1, getnum(b));
            if(a == ">=") mx2 = max(mx2, getnum(b));
            if(a == "<") mi1 = min(mi1, getnum(b));
            if(a == "<=") mi2 = min(mi2, getnum(b));
        }
        else{
            if(a == ">") mi2 = min(mi2, getnum(b));
            if(a == ">=") mi1 = min(mi1, getnum(b));
            if(a == "<") mx2 = max(mx2, getnum(b));
            if(a == "<=") mx1 = max(mx1, getnum(b));
        }
    }
    int mx = max(mx1, mx2);
    if(mx == mx1) mx++;
    int mi = min(mi1, mi2);
    if(mi == mi1) mi--;
    swap(mx, mi);
    //cout<<mx<<" "<<mi<<endl;
    if(mi > mx){
        printf("Impossible\n");
    }
    else{
        cout<<mi<<endl;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值