当前位置:网站首页>CAIP2021 初赛VP
CAIP2021 初赛VP
2022-07-07 21:50:00 【HeartFireY】
写点小题,放松一下。。。
A.7-1 懂的都懂
暴力打表,然后 O ( 1 ) O(1) O(1)回答询问即可。
#include<bits/stdc++.h>
using namespace std;
const int N = 100;
int a[N];
map<int, bool> mp;
inline void solve(){
int n = 0, k = 0; cin >> n >> k;
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 1; i <= n; i++){
for(int j = i + 1; j <= n; j++){
for(int k = j + 1; k <= n; k++){
for(int l = k + 1; l <= n; l++){
mp[a[i] + a[j] + a[k] + a[l]] = true;
}
}
}
}
for(int i = 1; i <= k; i++){
int m; cin >> m;
bool flag = true;
for(int i = 1; i <= m; i++){
int x; cin >> x;
if(!mp.count(x * 4)) flag = false;
}
if(flag) cout << "Yes\n";
else cout << "No\n";
}
}
signed main(){
solve();
return 0;
}
B.7-2 芬兰木棋
分象限和坐标轴按斜率排序,然后每个区域按顺序进行遍历,动态改变方向统计即可。
最大分数一定是所有木棋之和。可以assert检验答案对不对。
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 10, JD = 1e-5;
struct node{
int x, y, p;
double dis, k;
const bool operator< (const node & x) const {
return k < x.k || fabs(k - x.k) <= JD && dis < x.dis; }
}a[9][N];
int num[9] = {
0};
inline void solve(){
int n = 0; cin >> n;
//int sum = 0;
for(int i = 1; i <= n; i++){
int x, y, p; cin >> x >> y >> p; //sum += p;
double dis = pow((double)(x * x + y * y), 0.5);
double k = 1.0 * y / (1.0 * x);
if(x > 0 && y > 0) a[1][++num[1]] = {
x, y, p, dis, k};
if(x < 0 && y > 0) a[2][++num[2]] = {
x, y, p, dis, k};
if(x < 0 && y < 0) a[3][++num[3]] = {
x, y, p, dis, k};
if(x > 0 && y < 0) a[4][++num[4]] = {
x, y, p, dis, k};
if(x > 0 && y == 0) a[5][++num[5]] = {
x, y, p, dis, 0};
if(x < 0 && y == 0) a[6][++num[6]] = {
x, y, p, dis, 0};
if(x == 0 && y > 0) a[7][++num[7]] = {
x, y, p, dis, 0};
if(x == 0 && y < 0) a[8][++num[8]] = {
x, y, p, dis, 0};
}
for(int i = 1; i <= 8; i++) sort(a[i] + 1, a[i] + 1 + num[i]);
int cnt = 0, ans = 0, ansop = 0;
for(int x = 1; x <= 8; x++){
for(int i = 1; i <= num[x]; i++){
if(fabs(a[x][i].k - a[x][i - 1].k) <= JD){
if(a[x][i].p == 1) cnt++;
else{
if(cnt) ansop++, ans += cnt, cnt = 0;
ansop++, ans += a[x][i].p;
}
}
else{
if(cnt) ansop++, ans += cnt, cnt = 0;
if(a[x][i].p == 1) cnt++;
else ansop++, ans += a[x][i].p;
}
}
if(cnt) ansop++, ans += cnt, cnt = 0;
}
//assert(sum == ans);
cout << ans << ' ' << ansop << endl;
}
signed main(){
ios_base::sync_with_stdio(false);
solve();
return 0;
}
C.7-3 打怪升级
先跑Floyd再跑Dijkstra,代码没存…
属于是什么算法都能杂一起了。。。
D.7-4 疫情防控
典中典之并查集维护倒序加点
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N = 1e5 + 10;
vector<int> g[N];
struct unionfind{
int par[N];
unionfind(int n) {
for(int i = 1; i <= n; i++) par[i] = i; }
int find(int u){
return (u == par[u] ? u : par[u] = find(par[u])); }
void merge(int u, int v){
int fau = find(u), fav = find(v);
if(fau != fav) par[fav] = u;
}
};
bitset<N> vis;
using pii = pair<int, int>;
struct query{
int c, q;
vector<pii> qu;
}a[N];
int ans[N];
inline void solve(){
int n, m, d; cin >> n >> m >> d;
for(int i = 1; i <= m; i++){
int u, v; cin >> u >> v;
g[u].emplace_back(v);
g[v].emplace_back(u);
}
vis.reset();
for(int i = 1; i <= d; i++){
int c, q; cin >> c >> q;
vis[c] = true;
a[i] = {
c, q};
for(int j = 1; j <= q; j++){
int u, v; cin >> u >> v;
a[i].qu.emplace_back(pii{
u, v});
}
}
unionfind uf(n);
for(int i = 1; i <= n; i++){
if(!vis[i]){
for(auto v : g[i])
if(!vis[v]) uf.merge(i, v);
}
}
for(int i = d; i >= 1; i--){
int cnt = 0;
for(auto q : a[i].qu){
if(uf.find(q.first) != uf.find(q.second)) cnt++;
}
int u = a[i].c;
vis[u] = false;
for(auto v : g[u]){
if(!vis[v]) uf.merge(u, v);
}
ans[i] = cnt;
}
for(int i = 1; i <= d; i++) cout << ans[i] << endl;
}
signed main(){
solve();
return 0;
}
边栏推荐
- Why does the market need low code?
- JMeter-接口自动化测试读取用例,执行并结果回写
- 十四、数据库的导出和导入的两种方法
- Transform XL translation
- 消费品企业敏捷创新转型案例
- 解决:信息中插入avi格式的视频时,提示“unsupported video format”
- CXF call reports an error. Could not find conduct initiator for address:
- Network security - joint query injection
- 消息队列与快递柜之间妙不可言的关系
- Wechat forum exchange applet system graduation design completion (6) opening defense ppt
猜你喜欢
Install a new version of idea. Double click it to open it
U盘拷贝东西时,报错卷错误,请运行chkdsk
ArcGIS: field assignment_ The attribute table field calculator assigns values to fields based on conditions
ArcGIS:矢量要素相同字段属性融合的两种方法
[record of question brushing] 3 Longest substring without duplicate characters
成年人只有一份主业是要付出代价的,被人事劝退后,我哭了一整晚
微信论坛交流小程序系统毕业设计毕设(4)开题报告
Wechat forum exchange applet system graduation design completion (8) graduation design thesis template
消费品企业敏捷创新转型案例
海内外技术人们“看”音视频技术的未来
随机推荐
七月第一周
网络安全-CSRF
Statistical method for anomaly detection
嵌入式音频开发中的两种曲线
Cascade-LSTM: A Tree-Structured Neural Classifier for Detecting Misinformation Cascades-KDD2020
Inftnews | web5 vs Web3: the future is a process, not a destination
Network security -burpsuit
Network security - information query of operating system
Grid
Network security - joint query injection
Wechat forum exchange applet system graduation design completion (6) opening defense ppt
Online interview, how to better express yourself? In this way, the passing rate will be increased by 50%~
微信论坛交流小程序系统毕业设计毕设(5)任务书
二叉树(Binary Tree)
[language programming] exe virus code example
成年人只有一份主业是要付出代价的,被人事劝退后,我哭了一整晚
网络安全-burpsuit
Use JfreeChart to generate curves, histograms, pie charts, and distribution charts and display them to JSP-1
Are the microorganisms in the intestines the same as those on the skin?
2021-01-11