2541. 使数组中所有元素相等的最小操作数 II - 力扣(LeetCode)
题目中的含义是在一个数组里面进行+k -k
但是代码里面有 ans+=abs(nums1[i]-nums2[i])/k;
说明是相当于在两个数组里面分别操作(因为前提是可以操作成功)
然后再把结果/2 就相当于在一个数组里面操作了
class Solution { public: long long minOperations(vector<int>& nums1, vector<int>& nums2, int k) { long long num1=0,num2=0,ans=0; for(long long i=0;i<nums1.size();i++) { num1+=nums1[i]; num2+=nums2[i]; } if(num1!=num2) return -1; for(long long i=0;i<nums1.size();i++) { if(nums1[i]==nums2[i]) continue; if(k==0||(nums1[i]-nums2[i])%k!=0) return -1; ans+=abs(nums1[i]-nums2[i])/k; } return ans/2; } };
P3370 【模板】字符串哈希 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
这个题不会写(以后说不定就会了)
1020-倒水_牛客竞赛语法入门班数组模拟、枚举、贪心习题 (nowcoder.com)
#include<iostream> using namespace std; const int N=1e4+10; double a[N],b[N]; int main() { int n; cin>>n; double t,c; cin>>t>>c; double T=t*c,p=c; double mx=0,mi=1e4+10; for(int i=1;i<=n;i++) { cin>>a[i]>>b[i]; T+=a[i]*b[i]; c+=b[i]; mx=max(a[i],mx); mi=min(a[i],mi); } double res=T/c; if(res<=mi) { puts("Possible"); printf("%.4lf",mi); } else if(res>=mx) { puts("Possible"); printf("%.4lf",res); } else puts("Impossible"); }