2018 ICPC Asia Jakarta Regional Contest

题目传送门

题号 A B C D E F G H I J K L
状态 Ο . . Ο . . . . Ο . . Ο

Ο:当场

Ø:已补

.  :  待补

A. Edit Distance

Thinking:kk pai爷

Code:kk

  不能直接反转,比如"010101",直接反转后就变成"101010",右移一位,然后加个0就可以了。

  所以要先统计01的数量,如果0大于1,就全变成1,1大于0,就全变成0(从数量上的改变就大于s/2了),相等的话,就看首位是0还是1,取相反,后面和首位不一样就行(位置)。

#include<bits/stdc++.h>
#include<tr1/unordered_map>
#include<bits/stdc++.h>
#define clr(a,b) memset(a,b,sizeof(a))
#define fpn() freopen("simple.in","r",stdin)
#define rd read()
using namespace std;
const int maxn=2010;
typedef long long ll;
int a,b;
char s[maxn];
int main(){
    cin>>s+1;
    int n=strlen(s+1);
    for(int i=1;i<=n;i++)
    {
        if(s[i]=='0')a++;
        else b++;
    }
    if(a>b){
        for(int i=1;i<=n;i++)
        {
            printf("1");
        }
        puts("");
    }else if(a<b){
        for(int i=1;i<=n;i++)
        {
            printf("0");
        }
        puts("");
    }else{
        if(s[1]=='1'){
            printf("0");
            for(int i=2;i<=n;i++)
            {
                printf("1");
            }
            puts("");
        }else{
            printf("1");
            for(int i=2;i<=n;i++)
            {
                printf("0");
            }
            puts("");
        }
    }
} 
View Code

D. Icy Land

Thinking:kk

Code:pai爷

  首先我们考虑大一点的矩阵,对于$n*m$来说,中心的$(n-2)*(m-2)$的矩阵中,只要有冰地,这个冰地就必然到达不了,因为会直接划过去,所以我们要把中间这个矩阵直接变成"#",然后我们要确保外围的过道上有一个#能让我们进入中心区域。

  然后特殊考虑$2*n$的矩阵,还是中心的两行,只要上下有一个就可以了。

#include<bits/stdc++.h>
#include<tr1/unordered_map>
#include<bits/stdc++.h>
#define clr(a,b) memset(a,b,sizeof(a))
#define fpn() freopen("simple.in","r",stdin)
#define rd read()
using namespace std;
const int maxn=2010;
typedef long long ll;
int n,m,ans=0,flag;
char s[510][510];
void do1()
{
    for(int i=2;i<=m-1;i++)
      if(s[1][i]=='.') ans++;
}
void do2()
{
    for(int i=2;i<=n-1;i++)
      if(s[i][1]=='.') ans++;
}
void do3()
{
    for(int i=2;i<=n-1;i++)
      if(s[i][1]!='#'&&s[i][2]!='#') ans++;
}
void do4()
{
    for(int i=2;i<=m-1;i++)
      if(s[1][i]!='#'&&s[2][i]!='#') ans++;
}
void do5()
{
    for(int i=2;i<=n-1;i++)
      for(int j=2;j<=m-1;j++)
         if(s[i][j]=='.') ans++;
    flag=1;
    for(int i=2;i<=m-1;i++)
       if(s[1][i]=='#'||s[n][i]=='#') flag=0;
    for(int i=2;i<=n-1;i++)
       if(s[i][1]=='#'||s[i][m]=='#') flag=0;
    ans+=flag;
}
void work()
{
    if(n==1) do1(); 
    else if(m==1) do2(); 
    else if(m==2) do3(); 
    else if(n==2) do4();
    else do5();  
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) scanf("%s",s[i]+1);
    work();
    printf("%d\n",ans);
}
View Code

F. Popping Balloons

待补。 z

G. Go Make It Complete

待补。k

H. Lexical Sign Sequence

  训练的时候想的似乎是正解?不过电脑在刚J题,没时间写

待补.z

I. Lie Detector

Thinking

Code:pai爷

  签到。

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<string>
#include<map>
#include<queue>
#include<vector>
#include<stack>
#define ll long long
#define maxn 4001000
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
int n,p;
char s[100100][10];
ll read()
{
    ll x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
void init()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%s",s[i]); 
}
void work()
{
    if(s[1][0]=='L') p=0;
    else p=1;
    for(int i=2;i<=n;i++)
       if(s[i][0]=='L') p=!p;
    if(p==0) printf("LIE\n");
    else printf("TRUTH\n");
}
int main()
{
    init();
    work();
}
View Code

J. Future Generation

待补 p z

K. Boomerangs

待补 k

L:

#include<bits/stdc++.h>
#include<tr1/unordered_map>
#include<bits/stdc++.h>
#define clr(a,b) memset(a,b,sizeof(a))
#define fpn() freopen("simple.in","r",stdin)
#define rd read()
using namespace std;
const int maxn=2010;
typedef long long ll;
char c[66];
long long k,len;
int v[66];
inline long long f(void)
{
    long long i,s = 0;
    for(i = 0;i < len;i++)
    {
        if(!v[i])
        {
            s *= 2;
            if(c[i] == '1')
            {
                s += 1;
            }
        }
    }
    return s;
}
int main(){
    long long i;
    int ans;
    while(~scanf("%lld",&k))
    {
        scanf("%s",c);
        len = strlen(c);
        memset(v,0,sizeof(v));
        ans = 0;
        while(1)
        {
            if(f() <= k)
            {
                break;
            }
            bool flag = true;
            for(i = 1;i < len;i++)
            {
                if(c[i] == '1' && v[i] == 0)
                {
                    v[i] = 1;
                    flag = false;
                    break;
                }
            }
            if(flag)
            {
                for(i = 1;i < len;i++)
                {
                    if(c[i] == '0' && v[i] == 0)
                    {
                        v[i] = 1;
                        break;
                    }
                }
            }
            ans++;
        }
        printf("%d\n",ans);
    }
}
View Code

总结:

  kk:今天比赛中途吃了个外卖(下课食堂人太多了吧)。所以中间稍微耽搁了一下下,A题一眼想到假算法,发现wa了那么多,所以等了等,果然hack了假算法,和pai爷讨论后ac,吃外卖的时候看了d题,回来稍微画了画想到正解,pai爷写的代码。后面的题目和zz、pai爷分别讨论了两道题,一道题感觉时间复杂度不对,没写完就让电脑了,一道题和zz讨论的似乎是正解,时间不够了没写。今天主要是被代码实现能力卡住了,还有没有提早提醒队友卡题的时候看新题,本来H题应该是能做的。

猜你喜欢

转载自www.cnblogs.com/mountaink/p/10472719.html