• Codeforces Round #599 (Div. 2) A,B1,B2,C 【待补 D】


     排序+暴力

     1 #include<bits/stdc++.h>
     2  
     3 using namespace std;
     4  
     5 #define int long long
     6 #define N 1005000
     7 int arr[N];
     8  
     9 signed main(){
    10     int _,n;
    11     cin>>_;
    12     while(_--){
    13         cin>>n;
    14         for(int i=1;i<=n;i++)
    15             cin>>arr[i];
    16         sort(arr+1,arr+1+n);
    17         int ans=0;
    18         for(int i=1;i<=n;i++){
    19             int flag=0;
    20             int s=0;
    21             for(int j=n;j>=1;j--){
    22                 if(arr[j]>=i)
    23                     s++;
    24                 if(s>=i){
    25                     flag=1;
    26                     break;
    27                 }
    28             }
    29             if(flag){
    30                 ans=i;
    31             }else{
    32                 break;
    33             }
    34         }
    35         cout<<ans<<'
    ';
    36     }
    37     return 0;
    38 }

     直接暴力就行。【数据范围看错了。少开了一个0。啊啊,难受QAQ。。。。。。。】

     1 #include<bits/stdc++.h>
     2  
     3 using namespace std;
     4  
     5 #define int long long
     6 #define N 1500
     7 int a[N];
     8 signed main(){
     9     int _;
    10     cin>>_;
    11     while(_--){
    12         int n;
    13         cin>>n;
    14         string s1,s2;
    15         cin>>s1>>s2;
    16         if(s1==s2){
    17             printf("Yes
    ");
    18             continue;
    19         }
    20         int flag=0;int s=0;
    21         
    22         memset(a,0,sizeof(a));
    23          int cnt=0;
    24         for(int i=0;i<s1.size();i++){
    25             if(s1[i]!=s2[i]){
    26                 a[cnt++]=i;
    27                 s++;
    28             }
    29             if(s>2){
    30                 break;
    31             } 
    32         }
    33         if(s!=2){
    34             printf("No
    ");
    35         }else{
    36             if((s1[a[0]]==s1[a[1]]&&s2[a[0]]==s2[a[1]])){
    37                 printf("Yes
    ");
    38             }else{
    39                 printf("No
    ");
    40             }
    41         }
    42     }
    43     return 0;
    44 }

     思路:当字符串不相等时,优先考虑同行。当同行没有字符串时再考虑另外一行。模拟即可。

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 #define int long long
     5 
     6 signed main(){
     7     int _;
     8     cin>>_;
     9     while(_--){
    10         int n;
    11         cin>>n;
    12         string s1,s2;
    13         cin>>s1>>s2;
    14         int sum=0;int X=0;
    15         vector<pair<int,int> > ans;
    16         for(int i=0;i<n;i++){
    17             if(s1[i]!=s2[i]){
    18                 int flag1=0;int flag2=0;
    19                 for(int j=i+1;j<n;j++){
    20                     if(s1[j]==s1[i]){
    21                         flag1=1;
    22                         sum++;
    23                         ans.push_back(make_pair(j+1,i+1));
    24                         swap(s1[j],s2[i]);
    25                         break;
    26                     }
    27                 }
    28                 if(!flag1){
    29                     for(int j=i+1;j<s2.size();j++){
    30                         if(s2[j]==s1[i]){
    31                             sum+=2;
    32                             flag2=1;
    33                             ans.push_back(make_pair(j+1,j+1));
    34                             ans.push_back(make_pair(j+1,1+i));
    35                             swap(s2[j],s1[j]);
    36                             swap(s1[j],s2[i]);
    37                             break;
    38                         }
    39                     }
    40                 }
    41                 if(flag1==0&&flag2==0){
    42                     X=1;
    43                     break;
    44                 }
    45             }
    46         }
    47         if(X){
    48             printf("No
    ");
    49             continue;
    50         }
    51         if(sum<=2*n){
    52             printf("Yes
    ");
    53             printf("%lld
    ",sum);
    54             for(int i=0;i<ans.size();i++){
    55                 cout<<ans[i].first<<" "<<ans[i].second<<'
    ';
    56             }
    57         }else{
    58             printf("No
    ");
    59         }
    60     }
    61     return 0;
    62 } 

     

     题意:给排成一行的 n个格子,要求所有的 i,j 满足 |ij|是 n 的因子的,都要同色,求最大的涂色数。

    思路:所有因子的GCD。

     1 #include<bits/stdc++.h>
     2  
     3 using namespace std;
     4  
     5 #define int long long
     6  
     7 signed main(){
     8     int n;cin>>n;
     9     int ans=1;
    10     int flag=0;
    11     int K=0;
    12     for(int i=2;i*i<=n;i++){
    13         if(n%i==0){
    14             flag=1;
    15             if(!K){
    16                 ans=i;
    17                 ans=__gcd(ans,n/i);
    18                 K=1;
    19             }else{
    20                 ans=__gcd(ans,i);
    21             ans=__gcd(ans,n/i);    
    22             }
    23         }
    24     }    
    25     if(flag==0){
    26         cout<<n<<'
    ';
    27         return 0;
    28     }
    29     cout<<ans;
    30     return 0;
    31 }

    菜是原罪。

  • 相关阅读:
    项目总结
    -webkit-background-clip渲染问题
    《编写可维护的JavaScript》- 类型检测
    百度ECharts使用
    使用HBuilderX将vue项目打包成app
    浅谈 asp.net core web api
    ASP.NET Core
    ASP.NET Core
    [翻译] 探究 Asp.net core 中间件 JWT bearer authentication 背后的技术
    ASP.NET Core
  • 原文地址:https://www.cnblogs.com/pengge666/p/11810047.html
Copyright © 2020-2023  润新知