codeforce div2 #775
作者:互联网
1/A题:
https://codeforces.com/contest/1649/problem/A
这一题其实很简单,就是要求最左边和最右边的最小距离(只能跨一次水,no more than once!!!)
#include <iostream> #include <cstring> using namespace std; const int N = 1110; int q[N]; int t, n; int main() { cin >> t; while(t--) { cin >> n; for(int i = 1; i <= n; i++) cin >> q[i]; int l = 1, r = n; while(q[l] == 1) l++; l--; while(q[r] == 1) r--; r++;; if(l > r) cout << 0 << endl; else cout << r-l << endl; } return 0; }
2/B题:
https://codeforces.com/contest/1649/problem/B
这题:我们要把所有人传球的次数按升序排列,找到传球次数最大的an。我们假设传球次数总和为sum。如果an>=sum-an, 说明了出了an以为的所有人的传球次数加起来都不够an的传球次数,我们可以把除了an以外的所有人都当作同一个人,假设为a1,那么会有这样的结果:
an传球的次数为an,那么a1接球的次数也就为an,再减去a1自己传球给an的次数,就剩下了 an-a1,因为最后一个接球的人不需要再传球,所以如果an大于a1的话,就会有an-a1条路线。
如果an<=a1 那么只需要一个球就行了。 当然如果所有人传球的次数之和为0,那么就是0个球了。
#include <iostream> using namespace std; typedef long long LL; const int N = 100010; int q[N]; int t; int main() { cin >> t; while(t--) { int n; cin >> n; LL sum = 0; int ma = -1; for(int i = 0; i < n; i++) { cin >> q[i]; ma = max(q[i], ma); sum += q[i]; } if(sum == 0) { cout << 0 << endl; continue; } if(ma <= sum - ma) cout << 1 << endl; else { cout << 2*ma - sum << endl; } } return 0; }
3/C题:
https://codeforces.com/contest/1649/problem/C
这题是求同一种数字的所有曼哈顿距离,不过在学会此题解法的同时,我也学会了一种累加一组数字两两之间差值之和的方法(不过要先排序);
根据大佬的思路:我们先把不同颜色的点的x,y左边分别存起来,然后再计算x轴距离之和的和,再计算y轴距离之差的和,然后加起来就是答案了。
这里我用的是map+vector,感觉要经常使用STL,会节省很多时间,和提供很多奇妙的方法。
#include <iostream> #include <map> #include <vector> #include <algorithm> using namespace std; #define pb push_back #define int long long int n, m, ma; signed main(){ map<int,vector<int> >mx, my; cin >> n >> m; for(int i=1;i<=n;i++){ for(int j=1;j <= m;j++){ int x;cin>>x; mx[x].pb(i); my[x].pb(j); ma=max(ma,x); } } int ans = 0; for(int i=1;i<=ma;i++) { int cnt=0,tot=0; vector<int>s=mx[i]; sort(s.begin(), s.end()); for(auto t:s){ ans+=cnt*t+tot; tot-=t,cnt++; } } for(int i=1;i<=ma;i++){ int cnt=0,tot=0; vector<int>s=my[i]; sort(s.begin(), s.end()); for(auto t:s){ ans+=cnt*t+tot; tot-=t,cnt++; } } printf("%lld\n",ans); return 0;
标签:775,传球,ma,int,cin,a1,codeforce,include,div2 来源: https://www.cnblogs.com/MoonSkyy/p/15979016.html