Educational Codeforces Round 29

太弱鸡了,所以只有4题。(C题最难,没有之一)

A. 给你一个数字x,问能不能补充几个前导零使得他变成回文数(可以补充0个前导零)

模拟题

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#define LiangJiaJun main
#define pa pair<int,int>
#define INF 1999122700
using namespace std;
string s;
int l,n;
int LiangJiaJun(){
    cin>>s;
    l=s.size();
    for(int t=0;t<=l;t++){
        n=s.size();
        bool fe=0;
        for(int i=0,j=n-1;i<=j;i++,j--)if(s[i]!=s[j]){fe=1;break;}
        if(!fe)return puts("YES"),0;
        s='0'+s;
    }
    puts("NO");
    return 0;
}


B.给你2*n个人,n-1艘大船,2艘小船,一艘小船必须载1人,一艘大船必须载2人,大船的不稳的系数为载的两个人的体重之差。小船都是稳定的,求问不稳的系数的总和最小是多少。(n<= 50 , | 体重 |<=1000)
枚举哪两个人要坐小船,剩下的人从小到大排序,两两相邻的坐一起

C.A和B猜拳,1,2,3分别代表锤子剪刀布。给两个九宫格a和b。共K次游戏,每次赢的得一分,输的不得分,平局都不得分,如果当前A出了i , B出 j ,那么下一局中A 会出a[i][j] , B 会出b[i][j] 求问K局之后,A,B 各多少分。
k<=10^18
找规律的题目,挺恶心的

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#define LiangJiaJun main
#define pa pair<int,int>
#define INF 1999122700
using namespace std;
long long k,s1=0,s2=0,ans1=0,ans2=0;
int a,b,na,nb,be=-1;
vector<pa>c;
int mp1[4][4],mp2[4][4],td[4][4];
int LiangJiaJun(){
    td[1][2]=td[1][1]=td[2][3]=td[2][2]=td[3][1]=td[3][3]=0;
    td[1][3]=td[2][1]=td[3][2]=1;
    cin>>k>>a>>b;
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)cin>>mp1[i][j];
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)cin>>mp2[i][j];
    c.push_back(make_pair(a,b));
    for(int i=1;i<k;i++){
        int x=c[c.size()-1].first,y=c[c.size()-1].second;
        na=mp1[x][y];nb=mp2[x][y];
        for(int j=0;j<c.size();j++)
            if(na==c[j].first&&nb==c[j].second){
                be=j;break;
            }
        if(be!=-1)break;
        c.push_back(make_pair(na,nb));
    }
    if(be==-1){
        for(int i=0;i<c.size();i++){
            ans1+=td[c[i].first][c[i].second];
            ans2+=td[c[i].second][c[i].first];
        }
        cout<<ans1<<" "<<ans2<<endl;
        return 0;
    }
    int l=c.size()-be;
    for(int i=0;i<be;i++){
        k--;
        ans1+=td[c[i].first][c[i].second];
        ans2+=td[c[i].second][c[i].first];
    }
    for(int i=be;i<c.size();i++){
        s1+=td[c[i].first][c[i].second];
        s2+=td[c[i].second][c[i].first];
    }
    ans1+=s1*(k/l);
    ans2+=s2*(k/l);
    for(int i=be;i<be+(k%l);i++){
        ans1+=td[c[i].first][c[i].second];
        ans2+=td[c[i].second][c[i].first];
    }
    cout<<ans1<<" "<<ans2<<endl;
    return 0;
}

D.给一个序列,长度n,共有q次操作,每次操作三个数t,l,r。如果t==1,那么将下标∈[l,r]的所有数字向右移动一位,下标为r的那个数字移到l;如果t==2,将序列[l,r]翻转。m个询问,每次询问一个x,询问做完这些操作后下标为x 的位置上那个数是多少。
n,q <=2*10^5 ,m<=100
看见m的范围就知道直接暴力了。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#define LiangJiaJun main
#define pa pair<int,int>
#define INF 1999122700
using namespace std;
struct data{int p,l,r;}a[200004];
int n,b[200004],x,q,m;
int LiangJiaJun(){
    scanf("%d%d%d",&n,&q,&m);
    for(int i=1;i<=n;i++)scanf("%d",&b[i]);
    for(int i=1;i<=q;i++)scanf("%d%d%d",&a[i].p,&a[i].l,&a[i].r);
    for(int t=1;t<=m;t++){
        scanf("%d",&x);
        for(int i=q;i>=1;i--){
            if(!(a[i].l<=x&&x<=a[i].r))continue;
            if(a[i].p==1){
                if(x==a[i].l)x=a[i].r;
                else x--;
            }
            else x=a[i].r-x+a[i].l;
        }
        printf("%d ",b[x]);
    }
    puts("");
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值