• Codeforces Round #820 (Div. 3)


    A~E题都是很普通的签到模拟题

    【就是这D题题面好长啊,第一遍看硬是没看懂

    A. Two Elevators

    一共两部电梯,输出哪一部电梯先到

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int T;cin>>T;
    6. while(T--){
    7. int a,b,c;cin>>a>>b>>c;
    8. int aa=a-1;int bb=abs(b-c)+c-1;
    9. if(aa1<<'\n';
    10. else if(aa>bb)cout<<2<<'\n';
    11. else if(aa==bb)cout<<3<<'\n';
    12. }
    13. return 0;
    14. }

    B. Decode String

    把数字转化为字母输出

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int q;cin>>q; string s; int n;
    6. while(q--){
    7. cin>>n;cin>>s;
    8. vector<int>v;bool f=0;
    9. for(int i=0;i
    10. if(s[i]=='0'&&s[i+1]=='0'){f=1;v.push_back(i-1);i++;}
    11. else if(s[i]=='0'){v.push_back(i-2);f=1;}
    12. }
    13. int q=0;
    14. for(int i=0;i
    15. if(q<(int)v.size()&&i!=v[q])cout<<char(s[i]-'0'-1+'a');
    16. else if(q<(int)v.size()&&i==v[q]){
    17. cout<<char((s[i]-'0')*10+(s[i+1]-'0')-1+'a');
    18. q++;i=i+2;
    19. }
    20. else cout<<char(s[i]-'0'-1+'a');
    21. }
    22. cout<<"\n";
    23. }
    24. return 0;
    25. }

    C. Jumping on Tiles

    按照字母顺序输出字符位置

    1. #include
    2. using namespace std;
    3. pair<char,int> s[200005];
    4. bool cmp(pair<char,int> a,pair<char,int> b){
    5. if(a.first!=b.first)return a.first
    6. return a.second
    7. }
    8. bool cmp1(pair<char,int> a,pair<char,int> b){
    9. if(a.first!=b.first)return a.first>b.first;
    10. return a.second
    11. }
    12. int main()
    13. {
    14. int T;cin>>T;
    15. while(T--){
    16. string ss;cin>>ss;
    17. for(int i=0;isize();i++){s[i].first=ss[i];s[i].second=i;}
    18. int n=(int)ss.size();
    19. cout<<abs(ss[0]-ss[n-1])<<' ';
    20. char st=ss[0],en=ss[n-1];
    21. vector<int>v;int i=0;
    22. if(st<=en) sort(s,s+n,cmp);
    23. else sort(s,s+n,cmp1);
    24. while(s[i].first!=st)i++;
    25. while(s[i].first!=en){v.push_back(s[i].second);i++;}
    26. while(i!=n&&s[i].first==en){v.push_back(s[i].second);i++;}
    27. cout<<(int)v.size()<<'\n';
    28. for(int i=0;isize();i++)cout<1<<" ";
    29. cout<<'\n';
    30. }
    31. return 0;
    32. }

    D. Friends and the Restaurant

    两头贪心地取一对参加饭局

    1. #include
    2. using namespace std;
    3. int x[200005],y[200005],c[200005];
    4. int main()
    5. {
    6. int T;cin>>T;
    7. while(T--){
    8. int n;cin>>n;
    9. for(int i=0;i>x[i];
    10. for(int i=0;i>y[i];c[i]=x[i]-y[i];}
    11. sort(c,c+n);
    12. int left=0,right=0;
    13. int l=0,r=n-1,cnt=0;
    14. while(l
    15. if(c[l]+c[r]>0)r--;
    16. else {cnt++;l++;r--;}
    17. }
    18. cout<'\n';
    19. }
    20. return 0;
    21. }

    E. Guess the Cycle Size

    题意是猜圈上有多少个点

    交互题真的很好玩,就像抽卡一样hhhh

    但是忽略了范围是long long

    WA了几发

    但真的很好玩

    1. #include
    2. using namespace std;
    3. #define int long long
    4. signed main()
    5. {
    6. int left=0,right=0;
    7. for(int i=2;i<=50;i++){
    8. cout<<"? "<<1<<" "<>left;
    9. cout<<"? "<" "<<1<>right;
    10. if(left==-1||right==-1){cout<<"! "<-1<return 0;}
    11. else if(left!=right){cout<<"! "<return 0;}
    12. }
    13. return 0;
    14. }

    Kirei and the Linear Function

    题意:输入一串数字字符串,输入w,表示字串的长度;输入查询次数m;

    字符串从1开始。输入l,r ,表示子串s[l , r],设vv子串s[l , r]表示的数字,输入k,表示余数。

    求 l1 和 l2,使得 s[ l1,l1+w-1]表达的数字*vv+s[ l2,l2+w-1]表达的数字 取模9的余数为k。

    思路:1)模9就是加起来等于9就可以了

    2)用前缀和可以很快地得到每个s[ i , i+w-1 ]  s[ l , r ]表示的数字(设为vv)

    3)将上面表示的数字%9的结果用vector储存起来

    3)已知vv,可以枚举0~9的数字 a 来列举 a*vv;由此,枚举b,使得(a*vv+b)%9==k

    4)将枚举的a和b在vector中找到对应的条件作为答案

    5)将答案排个序,找到最小的答案。

    代码:

    1. #include
    2. using namespace std;
    3. int sum[200005];
    4. int main()
    5. {
    6. int T;cin>>T;string s;int w,m,l,r,k,b;
    7. while(T--){
    8. vector<int >v[10];
    9. cin>>s;s=" "+s;
    10. for(int i=1;isize();i++)sum[i]=sum[i-1]+s[i]-'0';//前缀和
    11. cin>>w>>m;
    12. for(int i=1;i+w<=s.size();i++){
    13. int x=(sum[i+w-1]-sum[i-1])%9;
    14. v[x].push_back(i);
    15. }
    16. for(int i=0;i
    17. vector< pair<int,int> >ans;
    18. cin>>l>>r>>k; int vv=sum[r]-sum[l-1];
    19. for(int i=0;i<9;i++){
    20. if(k>(i*vv)%9)b=(k-(i*vv%9))%9;
    21. else b=(k+9-(i*vv%9))%9;
    22. if(v[i].empty()||v[b].empty())continue;
    23. if(i!=b)ans.push_back({v[i][0],v[b][0]});
    24. else if(v[i].size()>1)ans.push_back({v[i][0],v[i][1]});
    25. }
    26. if(!ans.empty()){
    27. sort(ans.begin(),ans.end());
    28. cout<0].first<<" "<0].second<<'\n';
    29. }
    30. else cout<<-1<<" "<<-1<<'\n';
    31. }
    32. }
    33. return 0;
    34. }

  • 相关阅读:
    Java设计模式--代理模式
    基础DFS与BFS
    设置代理服务器
    kustomize命令行:修改镜像,添加secret
    Sparksql补齐连续工单状态
    【计算机图形学入门】笔记3:变换Transformation(二维与三维)
    基于QT开发的线性代数初学者的矩阵计算器设计
    邮件自动化:简化Workplace中的操作
    极光魔链(JMLink)使用教程
    自动驾驶感知算法实战2——车载相机及图像处理
  • 原文地址:https://blog.csdn.net/zy98zy998/article/details/126891384