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 }