• 2022CCPC桂林站(A M C)


    Problem - A - Codeforces

    A. Lily

    思路:简单的签到,所有不在 L 旁的字符替换为 C 即可。

    代码:(以及注意注释里的部分) 是谁签到题都WA呀 哦是我呀.jpg 

    1. #include
    2. using namespace std;
    3. int main(){
    4. int n;cin>>n;
    5. string s;cin>>s;
    6. for(int i=0;iif(s[i]=='.')s[i]='C';
    7. for(int i=0;i
    8. if(s[i]=='L'){//注意这里L的判断
    9. if(i!=0&&s[i-1]=='C')s[i-1]='.';//注意这里C的判断
    10. if(i!=n-1&&s[i+1]=='C')s[i+1]='.';
    11. }
    12. }
    13. cout<
    14. return 0;
    15. }

    Problem - M - Codeforces

    M. Youth Finale

    提交的结果(题目限制3s)

    2230 ms11900 KB

    思路:

    冒泡排序求要交换的次数=求逆序对个数

    所以可以用归并排序或树状数组求逆序对O(nlogn)

    之后输入m个操作,求执行该操作后的逆序对个数

    为了记录每一次的操作后数组的状态,用了stl的list来记录

    对于reverse操作,新逆序对个数=组合数nC2-旧逆序对个数

    对于swap操作,设交换了y,新逆序对个数=(n-y)-(y-1)=n-2y+1

    务必记得开long long

    1. #include
    2. #define int long long
    3. using namespace std;
    4. int a[300005],base[300005];
    5. int ans=0,l,r;
    6. void mergesort(int l,int r)//归并排序
    7. {
    8. if(l==r) return;
    9. int mid=(l+r)>>1;
    10. if(l<=mid) mergesort(l,mid); //左递归
    11. if(mid+1<=r) mergesort(mid+1,r);//右递归
    12. int ln=l,rn=mid+1,k=l; //合并操作
    13. while(ln<=mid&&rn<=r){
    14. if(base[ln]
    15. else{
    16. a[k++]=base[rn++];
    17. ans+=mid-ln+1;
    18. }
    19. }
    20. while(ln<=mid) a[k++]=base[ln++];
    21. while(rn<=r) a[k++]=base[rn++];
    22. for(int i=l;i<=r;i++){
    23. base[i]=a[i];
    24. }
    25. }
    26. signed main() //务必记得开long long
    27. {
    28. list<int> li; //因为给了3秒 最终耗时2230 ms
    29. int n,m;cin>>n>>m;
    30. int zu=n*(n-1)/2;
    31. for(int i=1;i<=n;i++){cin>>base[i];li.push_back(base[i]);}
    32. mergesort(1,n);//交换次数就是在求逆序对
    33. cout<'\n';char x;
    34. for(int i=0;i
    35. cin>>x;
    36. if(x=='R'){reverse(li.begin(),li.end());ans=zu-ans;cout<10;}
    37. else{
    38. int y=*li.begin();
    39. li.erase(li.begin());
    40. li.push_back(y);
    41. ans+=(n-y);
    42. ans-=(y-1);
    43. cout<10;
    44. }
    45. }
    46. }

    Problem - C - Codeforces

    C. Array Concatenation

    思路:

     

    代码:

    1. #include
    2. using namespace std;
    3. #define int long long
    4. int a[100005];
    5. int b[200005];//注意这里要开两倍,不然WA
    6. const int mod=1000000007;
    7. long long binpow(long long a, long long b, long long m) {
    8. a %= m;
    9. long long res = 1;
    10. while (b > 0) {
    11. if (b & 1) res =res * a % m;
    12. a =a * a % m;
    13. b >>= 1;
    14. }
    15. return res;
    16. }
    17. signed main()
    18. {
    19. int n,m;cin>>n>>m;
    20. for(int i=1;i<=n;i++){cin>>a[i];}
    21. for(int i=1;i<=n;i++){b[i]=a[n-i+1];b[n+i]=a[i];}
    22. int s=0,ss=0;
    23. for(int i=1;i<=2*n;i++){
    24. s=s+b[i];s=s%mod;
    25. ss=ss+s;ss=ss%mod;
    26. }
    27. int ans1=(ss*binpow(2,m-1,mod)%mod+binpow(2,m-1,mod)*(binpow(2,m-1,mod)+mod-1)%mod*2*n%mod*s%mod*binpow(2,mod-2,mod)%mod)%mod;
    28. s=0,ss=0;
    29. for(int i=1;i<=n;i++){
    30. s=s+a[i];s=s%mod;
    31. ss=ss+s;ss=ss%mod;
    32. }
    33. int ans2=(ss*binpow(2,m,mod)%mod+binpow(2,m,mod)*(binpow(2,m,mod)+mod-1)%mod*n%mod*s%mod*binpow(2,mod-2,mod)%mod)%mod;
    34. cout<<max(ans2,ans1)<
    35. return 0;
    36. }

    E. Draw a triangle

    Problem - E - Codeforces

    思路(官方题解):

     

    注意:

    1.向量不要写反,A(x1,y1)B(x2,y2)AB(x2-x1,y2-y1)

    2.叉积不要写反,注意exgcd为 exgcd(-b,a,x,y);

    3.遇到x1=x2 or y1=y2 要注意判断

    1. #include
    2. using namespace std;
    3. #define int long long
    4. inline int exgcd(int a, int b, int &x, int &y)
    5. {
    6. if(! b){x=1;y = 0;}
    7. else{
    8. exgcd(b, a % b, x, y);
    9. int t=x;
    10. x=y;y=t-(a/b)*y;
    11. }
    12. return 0;
    13. }
    14. signed main()
    15. {
    16. int T;cin>>T;
    17. while(T--){
    18. int x1,x2,y1,y2;
    19. cin>>x1>>y1>>x2>>y2;
    20. int a=(-x1+x2),b=(-y1+y2);
    21. if(a==0){
    22. cout<1<<" "<'\n';
    23. }
    24. else if(b==0){
    25. cout<" "<1<<'\n';
    26. }
    27. else{
    28. int x,y;
    29. exgcd(-b,a,x,y);
    30. cout<" "<'\n';
    31. }
    32. }
    33. return 0;
    34. }

  • 相关阅读:
    table的展开折叠按钮操作
    MySQL用户管理(CentOS)
    若依分离版——配置多数据源(mysql和oracle),实现一个方法操作多个数据源
    语义图像合成在AI去衣技术中的应用
    推荐一款图表功能强大的可视化报表工具
    Pycharm中终端不显示虚拟环境名解决方法
    Go学习笔记
    1. yolo 前置知识
    3dmax如何在渲染完之后加载VFB的参数和LUT文件?
    ​Black Hat 2022 聚焦软件供应链安全
  • 原文地址:https://blog.csdn.net/zy98zy998/article/details/127635673