• Codeforces Round #818 (Div. 2)


    出现了一些很严重的问题,,思路有了代码写不对,队内主代码手这样很危险啊。

    A. Madoka and Strange Thoughts

    给出数字n,求从1~n中满足lcm(a,b)/gcd(a,b)<=3的a,b对数。

    思路:这个相除表示两数的最小公倍数最多是最大公因数的3倍,说明两数中较大数最多是较小数的三倍,这样直接计算即可。

    AC Code:

    1. #include
    2. typedef long long ll;
    3. const int N=1e5+5;
    4. ll t,n;
    5. int main(){
    6. std::ios::sync_with_stdio(false);
    7. std::cin.tie(0);
    8. std::cout.tie(0);
    9. std::cin>>t;
    10. while(t--){
    11. std::cin>>n;
    12. ll ans=n;
    13. ans+=n/2*2+n/3*2;
    14. std::cout<'\n';
    15. }
    16. return 0;
    17. }

    B. Madoka and Underground Competitions

    给出一个n*n的矩阵,规定一个点为‘X’,从上下左右四个方向上每隔k个格子最少有一个'X’,其他的格子上是‘.’ ,最小化‘X’的个数,输出构造的矩阵。

    思路:我们最小化X的个数的方式是从规定位置开始斜着赋值,每一个赋X,然后再看每一行,在该行赋了X的位置向左向右每隔k个赋X,能保证这样满足要求时用的X最少。

    AC Code:

    1. #include
    2. typedef long long ll;
    3. const int N=505;
    4. int t,n,k,r,c;
    5. char s[N][N];
    6. int main(){
    7. std::ios::sync_with_stdio(false);
    8. std::cin.tie(0);
    9. std::cout.tie(0);
    10. std::cin>>t;
    11. while(t--){
    12. std::cin>>n>>k>>r>>c;
    13. for(int i=1;i<=n;i++){
    14. for(int j=1;j<=n;j++){
    15. s[i][j]='.';
    16. }
    17. }
    18. for(int i=0;i+r<=n;i++){
    19. int x=i+r,y=c-i;
    20. for(int j=y;j<=n;j+=k){
    21. if(j>=1) s[x][j]='X';
    22. }
    23. for(int j=y;j>=1;j-=k){
    24. if(j<=n) s[x][j]='X';
    25. }
    26. }
    27. for(int i=1;r-i>=1;i++){
    28. int x=r-i,y=c+i;
    29. for(int j=y;j<=n;j+=k){
    30. if(j>=1) s[x][j]='X';
    31. }
    32. for(int j=y;j>=1;j-=k){
    33. if(j<=n) s[x][j]='X';
    34. }
    35. }
    36. for(int i=1;i<=n;i++){
    37. for(int j=1;j<=n;j++){
    38. std::cout<
    39. }
    40. std::cout<<'\n';
    41. }
    42. }
    43. return 0;
    44. }

    C. Madoka and Formal Statement

    给出两个数组a和b,对a数组进行操作,当该数后一个数大于它时,可以将该数+1, 对于最后一个数,则是与第一个数比较,问是否可以经过若干次操作使得a数组等于b数组。

    思路:首先显而易见的一点是,如果a数组中存在某个数大于b数组,那一定不满足条件;另外在目标数组中,前一个数最多比后一个数大1,因为两数相等之后,前一个数最多还能进行一次+1操作。

    AC Code:

    1. #include
    2. typedef long long ll;
    3. const int N=505;
    4. int t,n;
    5. int main(){
    6. std::ios::sync_with_stdio(false);
    7. std::cin.tie(0);
    8. std::cout.tie(0);
    9. std::cin>>t;
    10. while(t--){
    11. std::cin>>n;
    12. std::vector<int>a(n),b(n);
    13. for(auto &x:a) std::cin>>x;
    14. for(auto &x:b) std::cin>>x;
    15. bool flag=true;
    16. for(int i=0;i
    17. if(a[i]>b[i]){
    18. flag=false;
    19. break;
    20. }
    21. if(a[i]b[(i+1)%n]+1){
    22. flag=false;
    23. break;
    24. }
    25. }
    26. std::cout<<(flag?"YES":"NO")<<'\n';
    27. }
    28. return 0;
    29. }

    os:跟着cup-pyy佬学习了一些新奇的写法,注意这样输入数组的值需要定义等大小的vector。

    D. Madoka and The Corruption Scheme

    M希望最后胜利的人的编号尽可能小,因为这样主办方给他的钱会多,而主办方则会不定向地修改比赛结果,使得花钱更少,即最后赢家的编号尽可能大,所以我们可以认为两者的目标是对立的。而现在对于这个比赛,M可以做的是修改一开始的顺序和决定每一局谁胜谁负,主办方可以修改k场比赛的结果。求最后的赢家编号,要对1e9+7取模。

    思路:显而易见的是每个人如果想最后取得胜利,那他必须要赢n局比赛。现在可以分类讨论:如果k>=n,那主办方一定可以使编号最大的人胜利,因为使一个人胜利最多的修改次数是n次,这种情况下输出的答案就是最大的编号2^n;当k

    AC Code:

    1. #include
    2. #define int long long
    3. typedef long long ll;
    4. const int mod=1e9+7;
    5. const int N=1e5+5;
    6. int t,n,k;
    7. int fact[N],infact[N];
    8. int pmod(int a,int b){
    9. int res=1;
    10. while(b){
    11. if(b&1) res=res*a%mod;
    12. b>>=1;
    13. a=a*a%mod;
    14. }
    15. return res;
    16. }
    17. void init(){
    18. fact[0]=infact[0]=1;
    19. for(int i=1;i<=N-3;i++){
    20. fact[i]=fact[i-1]*i%mod;
    21. infact[i]=infact[i-1]*pmod(i,mod-2)%mod;
    22. }
    23. }
    24. int C(int n,int x){
    25. return fact[n]*infact[n-x]%mod*infact[x]%mod;
    26. }
    27. signed main(){
    28. std::ios::sync_with_stdio(false);
    29. std::cin.tie(0);
    30. std::cout.tie(0);
    31. init();
    32. std::cin>>n>>k;
    33. if(k>=n){
    34. std::cout<<pmod(2,n)%mod<<'\n';
    35. return 0;
    36. }
    37. int ans=0;
    38. for(int i=0;i<=k;i++){
    39. ans=(ans+C(n,i))%mod;
    40. }
    41. std::cout<'\n';
    42. return 0;
    43. }

    os:看题意搞了三天,终于搞出来了!!!!!

    E是欧拉函数,数论嘛完全不会的,溜了溜了

  • 相关阅读:
    TLog轻量级分布式日志标记追踪神器
    【数据结构】栈与队列的实现
    物联网的应用——工业自动化
    Stable Diffusion中的ControlNet插件
    电子支付市场现状研究:预计2022年业务量将增长至3141亿元
    数字孪生智慧工厂3D无代码编辑工具提供强大、简单功能
    数据科学与大数据(3)
    Java毕业设计-二手物品交易市场
    提升自己最快的方式是什么?
    正则表达式
  • 原文地址:https://blog.csdn.net/m0_62289613/article/details/126676703