2022.07.07 暑假集训 个人排位赛
Posted 晁棠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022.07.07 暑假集训 个人排位赛相关的知识,希望对你有一定的参考价值。
2022.07.07 暑假集训 个人排位赛(二)
赛后反省
做出的题目多了,但是排名还是那样。对于题目的特殊样例情况没有完全顾及到,所以有一题错了很多发,有一题一直做不对,就卡一个点,后面心态爆炸不想做了。继续加油,过题状态比昨天好很多。
Problem A
出处
Codeforces-707B
题解
建图,以每个面粉店看与其相连的能够开设面包店的城市的边的最小值是多少。
代码
// Good Good Study, Day Day AC.
#include <iostream>
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <cstring>
#include <math.h>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <vector>
#include <map>
#include <algorithm>
#include <unordered_map>
#include <unordered_set>
#define ffor(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define rrep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define mst(v,s) memset(v,s,sizeof(v))
#define IOS ios::sync_with_stdio(false),cin.tie(0)
#define ll long long
#define INF 0x7f7f7f7f7f7f7f7f
#define inf 0x7f7f7f7f
#define PII pair<int,int>
#define int long long
using namespace std;
const int N=1e5+5;
int n, T = 1, m, k;
int pi,p[N],nxt[N*2],to[N*2],cost[N*2];
int a[N],ans=inf;
bool f[N];
void add_in(int u,int v,int c)
pi++;nxt[pi]=p[u];p[u]=pi;to[pi]=v;cost[pi]=c;
void ready()
cin>>n>>m>>k;
ffor(i,1,m)
int u,v,c;
cin>>u>>v>>c;
add_in(u,v,c);
add_in(v,u,c);
ffor(i,1,k)
cin>>a[i];
f[a[i]]=true;
ffor(i,1,k)
int u=a[i];
for(int k=p[u];k;k=nxt[k])
int v=to[k];
if(!f[v])
ans=min(ans,cost[k]);
if(ans==inf) ans=-1;
cout<<ans;
void work()
signed main()
IOS;
ready();
// cin>>T;
while (T--)
work();
return 0;
Problem B
出处
Codeforces-707C
题解
对于勾股数 ( a , b , c ) (a,b,c) (a,b,c),可以有以下等式成立
a = x 2 − y 2 , b = 2 ∗ x ∗ y , c = x 2 + y 2 a=x^2-y^2,b=2*x*y,c=x^2+y^2 a=x2−y2,b=2∗x∗y,c=x2+y2
其中 x , y x,y x,y为正整数。那么当已知一个数的时候,且这个数是偶数,假设这个数是b,则很容易得到x 和 y,从而得到a 和 b。当这个数是奇数的时候,另外两个数分别为 n 2 / 2 和 ( n 2 + 1 ) / 2 n^2/2和(n^2+1)/2 n2/2和(n2+1)/2。
代码
// Good Good Study, Day Day AC.
#include <iostream>
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <cstring>
#include <math.h>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <vector>
#include <map>
#include <algorithm>
#include <unordered_map>
#include <unordered_set>
#define ffor(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define rrep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define mst(v,s) memset(v,s,sizeof(v))
#define IOS ios::sync_with_stdio(false),cin.tie(0)
#define ll long long
#define INF 0x7f7f7f7f7f7f7f7f
#define inf 0x7f7f7f7f
#define PII pair<int,int>
#define int long long
using namespace std;
int n, T = 1;
int gcd(int x,int y)
return x%y==0?y:gcd(y,x%y);
bool check_(int a,int b,int c)
if(a+b<=c || b+c<=a || a+c<=b) return false;
if(a*a+b*b!=c*c) return false;
return true;
void ready()
cin>>n;
if(n==1 || n==2)
cout<<-1;
return;
if(n%2==0)
int b=n;
int x=1,y=b/2;
int a=y*y-1,c=y*y+1;
cout<<a<<' '<<c;
return ;
n=n*n;
cout<<n/2<<' '<<(n+1)/2;
void work()
signed main()
IOS;
ready();
// cin>>T;
while (T--)
work();
return 0;
Problem D
出处
Codeforces-707E
题解
二维树状数组。
我也很疑惑为什么不超时,但是就是没有超时。
因为ask的次数很少,所以每次switch时不先转换,待到ask的时候再判断当前状态与上一次ask相比变了否,如果与上一次比改变了,则进行转换。
单点修改,区间求和,二维树状数组。
代码
// Good Good Study, Day Day AC.
#include <iostream>
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <cstring>
#include <math.h>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <vector>
#include <map>
#include <algorithm>
#include <unordered_map>
#include <unordered_set>
#define ffor(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define rrep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define mst(v,s) memset(v,s,sizeof(v))
#define IOS ios::sync_with_stdio(false),cin.tie(0)
#define ll long long
#define INF 0x7f7f7f7f7f7f7f7f
#define inf 0x7f7f7f7f
#define PII pair<int,int>
#define int long long
using namespace std;
const int N = 2005;
int n, T = 1, m, k;
vector<PII> ve[N];
int t[N][N];
int val[N][N];
bool f[N],las[N];
int lowbite(int x)
return x & (-x);
void add_in(int x, int y, int add)
for (int i = x; i <= n; i += lowbite(i))
for (int j = y; j <= m; j += lowbite(j))
t[i][j] += add;
int get_sum(int x, int y)
int res = 0;
for (int i = x; i; i -= lowbite(i))
for (int j = y; j; j -= lowbite(j))
res += t[i][j];
return res;
int all_sum(int x, int y, int xi, int yi)
return get_sum(xi, yi) - get_sum(x - 1, yi) - get_sum(xi, y - 1) + get_sum(x - 1, y - 1);
void ready()
cin >> n >> m >> k;
ffor(t, 1, k)
f[t] = las[t] = true;
int temp;
cin >> temp;
ffor(i, 1, temp)
int u, v, w;
cin >> u >> v >> w;
add_in(u, v, w);
ve[t].push_back( u,v );
val[u][v] = w;
void work()
string st;
cin >> st;
if (st[0] == 'S')
int id;
cin >> id;
f[id] = !f[id];
return;
ffor(id, 1, k)
if (las[id] != f[id])
for (auto item : ve[id])
int x = item.first, y = item.second;
if (f[id]) add_in(x, y, val[x][y]);
else add_in(x, y, -val[x][y]);
las[id] = f[id];
int xi, yi, xj, yj2022.07.07 暑假集训 个人排位赛