题目比较长就不描述了 ... 就是一道 字符串 模拟题
通过 83.33% (错误原因 : 字符串中可能存在 空格 需要用 getline(cin,s) 来读取字符串)
输入 : 5 个数 : , 数据范围 , 每次操作 取 其中 4 个数 减 一
输出 : 最多的操作次数
通过 100%
void solve() {
for(int i = 0;i < 5;i ++) cin >> w[i];
sort(w,w + 5);
for(int i = 2;i < 5;i ++) w[i] -= w[0];
int l = 0 , r = w[1];// w[1:4] 的最小值 的最大值 的范围
while(l <= r) {
int mid = (l + r) / 2;
int d = w[1] - mid;
for(int i = 2;i < 5;i ++) {
if(w[i] < mid) d -= mid - w[i];
}
if(d < 0) r = mid - 1;
else l = mid + 1;
}
cout<<w[0] + l - 1<<"\n";
}
有 n 条直线 , , 且 , 每条直线初始没有颜色。
输入 : n , 和 n 行数据
输出 : 黑白线的最多的交点(即 黑白点)个数
通过 (93.33%) 14/15
void solve() {
cin >> n;
map<PII,int> mp;
for(int i = 0;i < n;i ++) {
cin >> A[i] >> B[i] >> t;
if(A[i] < 0) A[i] = -A[i] , B[i] = -B[i];
t = gcd(A[i],B[i]); A[i] /= t , B[i] /= t;
mp[{A[i],B[i]}] ++;
}
vector<int> h;
for(auto& [k,v] : mp) h.push_back(v);
vector<bool> dp(n + 1,false);
dp[0] = true;
for(auto& s : h) {
for(int i = n;i >= s;i --) if(dp[i - s]) dp[i] = true;
}
int res = 0;
for(int i = 1;i < n;i ++) if(dp[i]) res = max(res,(n - i) * i);
cout<<res<<"\n";
}