• Codeforces补题


    Problem - C - Codeforces

    23.11.7晚div2

    题目大意: 

    给定一个序列,长度为n,可以对它做k次操作。

    定义fixed point 为ai=i;

    定义操作为每次选择一个fixed point ai左移i下

    我们只需要判断是否能构造一个序列a使其经过n次操作后得到b。

    思路:

     根据这个性质就很容易反推了,每次我们看最后一个数,只要是小于n的那么就合法,看k次就好了。(看漏条件真的很要命。。

    如果做了n次操作就会回到之前的答案,因此我们实际上只需要做k%n次操作,但是检验时需要检验min(n,k)次。没有这个剪枝会超时。

    1. #include
    2. const int N=2e5+10;
    3. int a[N];
    4. void solve()
    5. {
    6. memset(a,0,sizeof a);
    7. int n,k;
    8. std::cin>>n>>k;
    9. for(int i=1;i<=n;i++) std::cin>>a[i];
    10. k=std::min(n,k);
    11. int last=n;
    12. while(k--)
    13. {
    14. if(a[last]>n)
    15. {
    16. std::cout<<"No\n";
    17. return ;
    18. }
    19. last=(last-a[last]+n)%n;
    20. }
    21. std::cout<<"Yes\n";
    22. }
    23. signed main()
    24. {
    25. int t;std::cin>>t;
    26. while(t--)
    27. {
    28. solve();
    29. }
    30. return 0;
    31. }

    Problem - B - Codeforces

    vp2

    题目大意: 

    A对应1,AA对应27,以此类推。

    数据有两种格式RXCY,(26进制)YX

    现在输入中有这两种格式,进行转换。

    模拟就好了。

    值得注意的是对这种字符串数字转换问题不能限定长度,必须要用while循环读入,熟悉一下stoi函数的使用,将字符串转为数字。 

    1. #include
    2. #define int long long
    3. void solve()
    4. {
    5. std::string s;
    6. std::cin>>s;
    7. int i=0;
    8. std::string str;
    9. while(isalpha(s[i]))
    10. {
    11. str+=s[i];
    12. i++;
    13. }
    14. if(str=="R")
    15. {
    16. //继续判断后面有没有字符
    17. std::string num;
    18. while(isdigit(s[i]))
    19. {
    20. num+=s[i];
    21. i++;
    22. }
    23. if(i==s.size())//字母数字型
    24. {//R23
    25. int ans='R'-'A'+1;
    26. std::cout<<"R"<stoi(num)<<"C"<'\n';
    27. //把字母转化成数字 BC->55
    28. /*int ans=0;
    29. for(auto i:str)
    30. {
    31. ans=ans*26+(i-'A'+1);
    32. }
    33. std::cout<
    34. }else{//RX==num CY
    35. i++;//跳过C
    36. std::string num2;
    37. while(isdigit(s[i]))
    38. {
    39. num2+=s[i];
    40. i++;
    41. }
    42. //数字转为字母
    43. int n=std::stoi(num2),cnt=0;
    44. std::stack<char> st;
    45. while(n)
    46. {
    47. int x=n%26;
    48. char p;
    49. if(x==0) p='Z',n--;//26进制借位
    50. else p='A'+x-1;
    51. st.push(p);
    52. n/=26;
    53. }
    54. while(!st.empty())
    55. {
    56. std::cout<top();
    57. st.pop();
    58. }
    59. std::cout<'\n';
    60. }
    61. }else{//开头不是R说明是字母数字型
    62. std::string num;
    63. while(isdigit(s[i]))
    64. {
    65. num+=s[i];
    66. i++;
    67. }
    68. //把字母转为数字 BC->55
    69. int ans=0;
    70. for(auto i:str)
    71. {
    72. ans=ans*26+i-'A'+1;
    73. }
    74. std::cout<<"R"<stoi(num)<<"C"<'\n';
    75. }
    76. }
    77. signed main()
    78. {
    79. int t;
    80. std::cin>>t;
    81. while(t--)
    82. {
    83. solve();
    84. }
    85. return 0;
    86. }

    Dashboard - Educational Codeforces Round 157 (Rated for Div. 2) - Codeforces

    题目大意:

    给定n个字符串,字符串只含1-9。是否存在s=si+sj,使得s的前半部和等于后半部分和。(i和j可以相同)

    对字符串的长度做标记。

    然后枚举左串和右串的长度,判断是否偶数。

    对所有符合条件的左串进行处理,将mid左边的和减去多余的右边,即该左串多出来的数,并记录。

    再对所有右串进行处理,将mid右边的和减去多余的左边,即右串多出来的数sum,相应的需要左串缺少sum,即ans+=mp[-sum]。

    1. #include
    2. #define int long long
    3. std::vector s[6];//标记字符串长度
    4. int ans;
    5. signed main()
    6. {
    7. int n;
    8. std::cin>>n;
    9. n--;
    10. for(int i=1;i<=n;i++)
    11. {
    12. std::string x;
    13. std::cin>>x;
    14. s[x.size()].push_back(x);
    15. }
    16. for(int lenl=1;lenl<=5;lenl++)
    17. {
    18. for(int lenr=1;lenr<=5;lenr++)
    19. {
    20. std::map<int,int> mp;
    21. if((lenl+lenr)%2) continue;
    22. int mid=(lenl+lenr)/2;
    23. for(auto i:s[lenl])
    24. {
    25. int sum=0;
    26. for(int j=0;j
    27. {
    28. if(j
    29. {
    30. sum+=(i[j]-'0');
    31. }else{
    32. sum-=(i[j]-'0');
    33. }
    34. }
    35. mp[sum]++;//左边多了sum
    36. }
    37. for(auto i:s[lenr])
    38. {
    39. int sum=0;
    40. for(int j=0;j
    41. {
    42. if(j>=mid)
    43. {
    44. sum+=i[lenr-1-j]-'0';
    45. } else{
    46. sum-=i[lenr-1-j]-'0';
    47. }
    48. }
    49. ans+=mp[-sum];
    50. }
    51. }
    52. }
    53. std::cout<
    54. return 0;
    55. }

  • 相关阅读:
    13 Go的错误处理
    Dockerfile命令详细讲解
    【ARC机制下的循环引用 Objective-C语言】
    法大大受邀参加高交会,为国产信创发展助力
    计算机毕业设计Java众筹平台网站(源码+系统+mysql数据库+lw文档)
    Kotlin 中的协程 flow
    数据库基本知识
    web测试——业务测试2
    MyBioSource 猴转甲状腺素蛋白 (TTR) ELISA试剂盒方案
    ThreadLocal线程变量
  • 原文地址:https://blog.csdn.net/m0_74183164/article/details/134295922