1 #include<bits/stdc++.h>
 2
 3 using namespace std;
 4 #define inf 0x3f3f3f3f3f3f
 5 #define int long long
 6 int vis[150];
 7 signed main(){
 8     int n,k;
 9     cin>>n>>k;
10     string str;
11     cin>>str;
12     map<int,int> mp;
13     int sum=0;
14     for(int i=0;i<str.size();i++){
15         if(!mp[str[i]-'A']){
16             mp[str[i]-'A']=1;
17             sum++;
18         }
19         vis[str[i]-'A']++;
20     }
21     if(sum==k){
22         int ans=inf;
23         for(int i=0;i<k;i++){
24             ans=min(ans,vis[i]);
25         }
26         //cout<<ans<<'\n';
27         cout<<ans*k;
28     }else{
29         cout<<"0";
30     }
31     return 0;
32 } 

 思路:猜了一个想法,就过了。

 1 #include<bits/stdc++.h>
 2
 3 using namespace std;
 4 #define int long long
 5
 6 signed main(){
 7     int n;
 8     cin>>n;
 9     if(n==1||n==2){
10         cout<<"No";return 0;
11     }
12     printf("Yes\n");
13     int m=n/2;
14     if(n%2){
15         int s1=0,s2=0;
16         printf("%lld ",1+m);
17         for(int i=1;i<=n;i+=2){
18             printf("%lld ",i);
19             s1+=i;
20         }
21         printf("\n");
22         printf("%lld ",m);
23         for(int i=2;i<=n;i+=2){
24             printf("%lld ",i);
25             s2+=i;
26         }
27         printf("\n");
28     //    cout<<__gcd(s1,s2)<<'\n';
29     }else{
30         int s1=0,s2=0;
31         printf("%lld ",m);
32         for(int i=1;i<=n;i+=2){
33             printf("%lld ",i);
34             s1+=i;
35         }
36         printf("\n");
37         printf("%lld ",m);
38         for(int i=2;i<=n;i+=2){
39             printf("%lld ",i);
40             s2+=i;
41         }
42         printf("\n");
43     //    cout<<__gcd(s1,s2)<<'\n';
44     }
45     return 0;
46 }
47 /*
48
49 */

 思路:贪心+模拟【判断应该加自己和移除对手的值哪一个大。优先队列维护最大值】

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define int long long
 4 #define N 10050005
 5 priority_queue <int,vector<int>,less<int> >q1;
 6 priority_queue <int,vector<int>,less<int> >q2;
 7 int a[N];
 8 int b[N];
 9 signed main(){
10     int n;cin>>n;
11     for(int i=1;i<=n;i++){
12         cin>>a[i];
13         q1.push(a[i]);
14     }
15     for(int i=1;i<=n;i++){
16         cin>>b[i];
17         q2.push(b[i]);
18     }
19     int suma=0,sumb=0;
20     int now=0;
21     while(1){
22         now++;
23         if(q1.empty()&&q2.empty()){
24             break;
25         }
26         int t1=0,t2=0;
27         if(now%2){//A
28             if(!q1.empty()&&!q2.empty()){
29                 t1=q1.top();
30                 t2=q2.top();
31                 if(t1>t2){
32                     q1.pop();
33                     suma+=t1;
34                 }else{
35                     q2.pop();
36                 }
37             }else if(q1.empty()&&!q2.empty()){
38                 q2.pop();
39             }else if(!q1.empty()&&q2.empty()){
40                 suma+=q1.top();
41                 q1.pop();
42
43             }
44
45         }else{
46             if(!q1.empty()&&!q2.empty()){
47                 t1=q1.top();
48                 t2=q2.top();
49                 if(t2>t1){
50                     q2.pop();
51                     sumb+=t2;
52                 }else{
53                     q1.pop();
54                 }
55             }else if(q1.empty()&&!q2.empty()){
56                 sumb+=q2.top();
57                 q2.pop();
58             }else if(!q1.empty()&&q2.empty()){
59                 q1.pop();
60             }
61
62         }
63     }
64     //cout<<suma<<" "<<sumb<<'\n';
65     cout<<suma-sumb;
66     return 0;
67 }
 1 #include<bits/stdc++.h>
 2
 3 using namespace std;
 4 #define int long long
 5 #define inf 1<<30
 6 #define N 10005000
 7 int arr[N];
 8 signed main(){
 9     int n;cin>>n;
10     if(n==1)
11     {
12         int qwq;
13         cin>>qwq;
14         cout<<qwq<<endl;return 0;
15     }
16     int flag1=0;int flag2=0;
17     int sum1=0;int minx=inf;
18     for(int i=1;i<=n;i++) {
19         cin>>arr[i];
20         sum1+=abs(arr[i]);
21         if(arr[i]<0){
22             flag1=1;
23         }else if(arr[i]>0){
24             flag2=1;
25         }
26         minx=min(minx,abs(arr[i]));
27     }
28     if(flag1&&flag2){
29         cout<<sum1;
30     }else{
31         cout<<sum1-abs(minx)*2;
32     }
33     return 0;
34 }
12-22 05:51