Gym 102219

A - Mental Rotation

题记:模拟题,先遍历字符串里L和R的数量,将L和R抵消掉,然后再余4(因为向右转4次或者向左转4次相当于没动)。然后按照题目模拟即可。

#include<bits/stdc++.h>

using namespace std;
const int N=1005;
char a[N][N];
char b[N][N];
char l(char x){
    char ans='.';
    if(x=='>')
        ans='^';
    else if(x=='v')
        ans='>';
    else if(x=='<')
        ans='v';
    else if(x=='^')
        ans='<';
    return ans;
}

char r(char x){
    char ans='.';
    if(x=='>')
        ans='v';
    else if(x=='v')
        ans='<';
    else if(x=='<')
        ans='^';
    else if(x=='^')
        ans='>';
    return ans;
}

int main(){
    int n;
    cin>>n;
    string s;
    cin>>s;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            cin>>a[i][j];
    int sum=0;
    for(int i=0;i<s.size();i++){
        if(s[i]=='R')
            sum++;
        else
            sum--;
    }
    sum%=4;
    while(sum){
        int c=1,d=1;
        if(sum>0){
        for(int i=1;i<=n;i++){
            for(int j=n;j>0;j--){
                b[c][d]=r(a[j][i]);
                d++;
            }
            c++,d=1;
        }
        sum--;
    }
    else{
        for(int i=n;i>0;i--){
            for(int j=1;j<=n;j++){
                b[c][d]=l(a[j][i]);
                d++;
            }
            c++,d=1;
        }
        sum++;
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            a[i][j]=b[i][j];
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++)
            cout<<a[i][j];
        cout<<endl;
    }
    return 0;
}

B - SpongeBob SquarePants

题记:水题,判断两个数是否相同即可。

#include<bits/stdc++.h>

using namespace std;

int main(){
    int t;
    cin>>t;
    while(t--){
        int a,b;
        cin>>a>>b;
        if(a==b) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}

E - Optimal Slots

H - Are You Safe?

I - To Crash Or Not To Crash

题记:先判断’=‘的位置,然后遍历’=‘右边,输出’=‘右边第一个不是’.'的字符,如果没有则输出You shall pass!!!。

#include<bits/stdc++.h>

using namespace std;
char a[5][15];
int main(){
    int x,y;
    for(int i=0;i<3;i++){
        for(int j=0;j<10;j++){
            cin>>a[i][j];
            if(a[i][j]=='='){
                x=i,y=j;
            }
        }
    }
    int flag=1;
    for(int i=y+1;i<10;i++){
        if(a[x][i]!='.'){
            cout<<a[x][i];
            flag=0;
            break;
        }
    }
    if(flag==1)
        cout<<"You shall pass!!!"<<endl;
    return 0;
}

J - Kitchen Plates

题记:先用next_permutation把所有情况打表存下来,之后遍历每种情况看一下两个字母是否符合,不符合的标记为0,最后遍历一次数组看一下有没有标记为1的情况,有则输出。

#include<bits/stdc++.h>

using namespace std;
const int N=1005;
char ans[N][10];
char a[]={'A','B','C','D','E'};
int cnt[130];
int main(){
    int sum=0;
    do{
        for(int i=0;i<5;i++)
            ans[sum][i]=a[i];
        sum++;
    }while(next_permutation(a,a+5));
    char str[5];
    memset(cnt,1,sizeof(cnt));
    for(int i=0;i<5;i++){
        cin>>str;
        if(str[1]=='<'){
            char x=str[0],y=str[2];
            for(int j=0;j<sum;j++){
                int p1,p2;
                for(int k=0;k<5;k++){
                    if(ans[j][k]==x)
                        p1=k;
                    if(ans[j][k]==y)
                        p2=k;
                }
                if(p1>p2)
                    cnt[j]=0;
            }
        }
        else{
            char x=str[0],y=str[2];
            for(int j=0;j<sum;j++){
                int p1,p2;
                for(int k=0;k<5;k++){
                    if(ans[j][k]==x)
                        p1=k;
                    if(ans[j][k]==y)
                        p2=k;
                }
                if(p1<p2)
                    cnt[j]=0;
            }
        }
    }
    int flag=1;
    for(int i=0;i<sum;i++){
        if(cnt[i]){
            for(int j=0;j<5;j++)
                cout<<ans[i][j];
            flag=0;
            break;
        }
    }
    if(flag)
        cout<<"impossible"<<endl;
    return 0;
}

K - Help The Support Lady

题记:对所有工作的时间进行排序,用一个数cnt记录下当前使用了多少时间,判断当前工作时间加上使用了的时间有没有超过当前工作时间的两倍即可。

#include<bits/stdc++.h>

using namespace std;
const int N=1e5+10;
int a[N],b[N];
int main(){
    int t;
    cin>>t;
    int sum=0;
    while(t--){
        sum++;
        int n;
        cin>>n;
        for(int i=0;i<n;i++) cin>>a[i];
        sort(a,a+n);
        long long cnt=0,ans=0;
        for(int i=0;i<n;i++){
            if(cnt+a[i]<=a[i]*2){
                cnt+=a[i];
                ans++;
            }
        }
        cout<<"Case #"<<sum<<": "<<ans<<endl;
    }
    return 0;
}

C - I Don’t Want To Pay For The Late Jar!

题记:直接找出最大值即可。

#include<bits/stdc++.h>

using namespace std;
const int N=1e4+10;
typedef long long ll;
const int INF=0x3f3f3f;
int a[N];
int main(){
    int t;
    cin>>t;
    int sum=0;
    while(t--){
        sum++;
        int n,m;
        cin>>n>>m;
        int mmax=-INF;
        for(int i=0;i<n;i++){
            int x,y;
            cin>>x>>y;
            if(y<=m)
                mmax=max(mmax,x);
            else
                mmax=max(mmax,x-y+m);
        }
        cout<<"Case #"<<sum<<": "<<mmax<<endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值