C 瓜瓜喜欢做 A + B
题意:n*m的网格,给你k次染色的机会,每次染色都可以选择一个点,把这个点所在的行和列染上ci的颜色,ci互不相同。
分析:每次染的格子数都是n*m-1,最后一次染色的颜色面积不被覆盖,一定最大。
题解:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, m, k;
cin >> n >> m >> k;
int a,b,c;
for(int i=0;i<k;i++)
{
cin >> a >> b >> c;
}
cout << n+m-1 << " " << c;
return 0;
}
E 瓜瓜不想上电工课
题意:n个二极管灯泡串联,灯泡的正向和反向电阻不同,首先灯泡是正向连接的,可以至多进行k次操作,操作可以反转灯泡,求总电阻的最小值。
分析:求正反电阻的差,排序,调换至多k次使总电阻变小。
题解:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100010];
ll b[100010];
ll c[100010];
ll s;
int main()
{
ll n, k;
cin >> n >> k;
for(ll i=1;i<=n;i++)
{
cin >> a[i];
s += a[i];
}
for(ll i=1;i<=n;i++)
{
cin >> b[i];
c[i] = b[i]-a[i];
}
sort(c+1,c+n+1);
for(ll i=1;i<=k&&i<=n;i++)
{
if(c[i]>=0) break;
s += c[i];
}
cout << s << endl;
return 0;
}
J 策策学长找py
题意:n*m的网格里有很多碎片,学长从(1,1)出发只能往下和往右走,问能否拿到所有的碎片。
分析:把碎片坐标排序,如果后一个碎片在这个碎片的左边或者上边,就no。
题解:
#include<bits/stdc++.h>
using namespace std;
struct ff{
int x, y;
};
ff a[200010];
bool cmp(ff a, ff b)
{
if(a.x == b.x)
return a.y < b.y;
return a.x < b.x;
}
int main()
{
int t;
cin >> t;
while(t--)
{
int n, m, k;
cin >> n >> m >> k;
for(int i=0;i<k;i++)
{
cin >> a[i].x >> a[i].y;
}
sort(a,a+k,cmp);
bool f = 1;
for(int i=1;i<k;i++)
{
if(a[i].x<a[i-1].x||a[i].y<a[i-1].y)
{
f = 0;
break;
}
}
if(f) cout << "YES\n";
else cout << "NO\n";
}
return 0;
}