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<<'\n';
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\n");
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\n");
35         }else{
36             if((s1[a[0]]==s1[a[1]]&&s2[a[0]]==s2[a[1]])){
37                 printf("Yes\n");
38             }else{
39                 printf("No\n");
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\n");
49             continue;
50         }
51         if(sum<=2*n){
52             printf("Yes\n");
53             printf("%lld\n",sum);
54             for(int i=0;i<ans.size();i++){
55                 cout<<ans[i].first<<" "<<ans[i].second<<'\n';
56             }
57         }else{
58             printf("No\n");
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<<'\n';
27         return 0;
28     }
29     cout<<ans;
30     return 0;
31 }

菜是原罪。

猜你喜欢

转载自www.cnblogs.com/pengge666/p/11810047.html