- C++
章节 5(废稿,不必查看)
- @ 2025-4-14 20:50:14
电影
思路(卡常):用map统计每个电影让多少人很开心,多少人较开心,最后排序即可。(关输入输出流可以直接卡常过)
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
struct P{
int love,like,num;
};
const int N=2e5+50;
P a[N];
unordered_map<int,int> mp;
bool cmp(P a,P b){
if(a.love==b.love) return a.like>b.like;
return a.love>b.love;
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,m;
cin >> n;
for(int i=1;i<=n;i++){
int yy;
cin >> yy;
mp[yy]++;
}
cin >> m;
for(int i=1;i<=m;i++){
a[i].num=i;
}
for(int i=1;i<=m;i++){
int yy;
cin >> yy;
a[i].love=mp[yy];
}for(int i=1;i<=m;i++){
int yy;
cin >> yy;
a[i].like=mp[yy];
}
sort(a+1,a+n+1,cmp);
cout << a[1].num;
}
货仓选址
思路:选中间(偶数则看心情选一个),然后绝对值相加。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+50;
int a[N];
signed main(){
int n;
cin >> n;
for(int i=1;i<=n;i++){
cin >> a[i];
}
sort(a+1,a+n+1);
int z=n/2+1,cnt=0;
for(int i=1;i<=n;i++){
if(i==z) continue;
cnt+=abs(a[z]-a[i]);
}
cout << cnt;
}
七夕祭
思路:横竖均为环形均分纸牌问题,具体分析方法见小蓝书 (《算法竞赛进阶指南》) P37-39页。
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+50;
int col[N],row[N];
int b[N];
int n,m,t;
int get(int n,int a[]){
if(t%n) return 2e9;
int pj=t/n,ans=0;
for(int i=2;i<=n;i++){
b[i]=b[i-1]+a[i]-pj;//换了一种形式写,本质不变
}
sort(b+1,b+n+1);
int mid=(n+1)/2;
for(int i=1;i<=n;i++) ans+=abs(b[mid]-b[i]);
return ans;
}
signed main(){
cin >> n >> m >> t;
for(int i=1;i<=t;i++){
int x,y;
cin >> x >> y;
row[x]++,col[y]++;
}
int a=get(n,row),b=get(m,col);
if(a!=2e9&&b!=2e9) cout << "both " << a+b;
else if(a!=2e9) cout << "row " << a;
else if(b!=2e9) cout << "column " << b;
else cout << "impossible";
}
0 条评论
目前还没有评论...