A

水题

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = 1e9 + , gakki = + + + + 1e9;
const int MAXN = 1e5 + , MAXM = 1e5 + , N = 1e5 + ;
const int MAXQ = ;
int to[MAXM << ], nxt[MAXM << ], Head[MAXN], tot = ;
inline void addedge(int u, int v)
{
to[++tot] = v;
nxt[tot] = Head[u];
Head[u] = tot;
}
int main()
{
ios_base::sync_with_stdio();
cin.tie();
ll n, m, a, b;
cin >> n >> m >> a >> b;
if (n % m == )
{
cout << << endl;
return ;
}
ll now = n / m;
ll ans1 = (n - now * m) * b;
ll ans2 = ((now + ) * m - n) * a;
cout << min(ans1, ans2) << endl;
return ;
}

B

题目说了 在某个数之前K范围内的都能被消除掉 所以直接作一个前缀和即可

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = 1e9 + , gakki = + + + + 1e9;
const int MAXN = 1e5 + , MAXM = 1e5 + , N = 2e5 + ;
const int MAXQ = ;
int to[MAXM << ], nxt[MAXM << ], Head[MAXN], tot = ;
inline void addedge(int u, int v)
{
to[++tot] = v;
nxt[tot] = Head[u];
Head[u] = tot;
}
int num[N];
int visit[];
priority_queue<int, vector<int>, greater<int> >que;
int main()
{
ios_base::sync_with_stdio();
cin.tie();
int n, k;
cin >> n >> k;
int anser = ;
for (int i = ; i <= n; i++)
{
cin >> num[i];
int l = max(num[i] - k, );
visit[l]++;
visit[num[i]]--;
}
for (int i = ; i <= ; i++)
{
visit[i] += visit[i - ];
}
for (int i = ; i <= n; i++)
{
if (!visit[num[i]])
{
anser++;
}
}
cout << anser << endl;
return ;
}

C

卡题意题..最后弱智答案没遍历完全FST了QAQ

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = 1e9 + , gakki = + + + + 1e9;
const int MAXN = 1e5 + , MAXM = 1e5 + , N = 2e5 + ;
const int MAXQ = ;
int to[MAXM << ], nxt[MAXM << ], Head[MAXN], tot = ;
inline void addedge(int u, int v)
{
to[++tot] = v;
nxt[tot] = Head[u];
Head[u] = tot;
}
ll n, flag, cnt, pop;
ll anser = ;
string ch[];
ll number[];
ll ansl[];
ll ansr[];
void init()
{
pop = , cnt = , flag = ;
}
int main()
{
int n;
cin >> n;
for (int i = ; i <= n; i++)
{
init();
cin >> ch[i];
for (int j = ; j < ch[i].size(); j++)
{
if (ch[i][j] == '(')
{
number[++pop] = ;
}
else
{
number[++pop] = -;
}
}
for (int i = ; i <= pop; i++)
{
cnt += number[i];
if (cnt < )
{
flag = ;
break;
}
}
if (!flag)
{
ansl[cnt]++;
}
flag = cnt = ;
for (int i = pop; i >= ; i--)
{
cnt -= number[i];
if (cnt < )
{
flag = ;
break;
}
}
if (!flag)
{
ansr[cnt]++;
}
}
for (int i = ; i <= ; i++)
{
anser += ansl[i] * ansr[i];
}
cout << anser << endl;
}

D

构造题

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = 1e9 + , gakki = + + + + 1e9;
const int MAXN = 1e5 + , MAXM = 1e5 + , N = 2e5 + ;
const int MAXQ = ;
int to[MAXM << ], nxt[MAXM << ], Head[MAXN], tot = ;
inline void addedge(int u, int v)
{
to[++tot] = v;
nxt[tot] = Head[u];
Head[u] = tot;
}
int ans[][];
int main()
{
int n;
int a, b;
cin >> n >> a >> b;
if (min(a, b) != )
{
cout << "NO" << endl;
return ;
}
if ((n == && a == && b == ) || (n == && a == && b == ))
{
cout << "NO" << endl;
return ;
}
if (a > && b == )
{
for (int i = ; i <= n; i++)
{
for (int j = ; j <= n; j++)
{
if (i != j)
{
ans[i][j] = ;
}
}
}
for (int i = ; i <= a - ; i++)
{
for (int j = ; j <= n; j++)
{
ans[i][j] = ;
ans[j][i] = ;
}
}
cout << "YES" << endl;
for (int i = ; i <= n; i++)
{
for (int j = ; j <= n; j++)
{
cout << ans[i][j];
}
cout << endl;
}
return ;
}
if (a == && b == )
{
for (int i = ; i <= n; i++)
{
ans[i][i + ] = ans[i + ][i] = ;
}
cout << "YES" << endl;
for (int i = ; i <= n; i++)
{
for (int j = ; j <= n; j++)
{
cout << ans[i][j];
}
cout << endl;
}
return ;
}
if (a == && b > )
{
for (int i = ; i <= b - ; i++)
{
for (int j = ; j <= n; j++)
{
if (i != j)
{
ans[i][j] = ans[j][i] = ;
}
}
}
cout << "YES" << endl;
for (int i = ; i <= n; i++)
{
for (int j = ; j <= n; j++)
{
cout << ans[i][j];
}
cout << endl;
}
return ;
}
}

E

直接把灯尽量往右放 贪心暴力即可 复杂度和调和级数有关 并不会炸

有些人暴力的姿势不对会FST

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = 1e9 + , gakki = + + + + 1e9;
const int MAXN = 1e5 + , MAXM = 1e5 + , N = 2e6 + ;
const int MAXQ = ;
int to[MAXM << ], nxt[MAXM << ], Head[MAXN], tot = ;
inline void addedge(int u, int v)
{
to[++tot] = v;
nxt[tot] = Head[u];
Head[u] = tot;
}
int n, m, k;
int visit[], has_block[], lighttt[];
ll anser;
int pop, summm, a1, a2;
void init()
{
summm = pop = ;
}
int main()
{
ios_base::sync_with_stdio();
cin.tie();
anser = LLONG_MAX;
int n, m, k, now;
cin >> n >> m >> k;
n++;
for (int i = ; i <= m; i++)
{
cin >> now;
visit[now + ] = ;
}
if (visit[])
{
cout << - << endl;
return ;
}
for (int i = ; i <= k; i++)
{
cin >> lighttt[i];
}
for (int i = ; i <= n; i++)
{
if (visit[i])
{
has_block[i] = has_block[i - ];
}
else
{
has_block[i] = i;
}
}
for (int i = ; i <= k; i++)
{
init();
while ()
{
if (pop + i >= n)
{
ll cnt = 1LL*summm * lighttt[i];
anser = min(anser, cnt);
break;
}
if (pop == has_block[pop + i])
{
break;
}
summm++;
pop = has_block[pop + i];
}
}
if (anser == LLONG_MAX)
{
cout << - << endl;
}
else
{
cout << anser << endl;
}
}

F

首先很显然 因为传递不改变总值而要求是每个点的值都为0 所以当点的总值不为0时 是Impossible

然后我们要做的就是 DFS出一个生成树 然后从叶子到根传递出以一个顶点为根的子树其值的总值

因为每条边连接有两个顶点 这条边可以把这颗树分为两个子树 但题目要求是全部节点的值为0

所以最终要求是这两个子树的值也为0 则这条边传递的值 一定是 |其中一个子树的总值-0|  再判一下方向即可

其他没用到的边 答案是0 直接输出就行了

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
const int mod = 1e9 + , gakki = + + + + 1e9;
const int MAXN = 2e5 + , MAXM = 2e5 + , N = 2e5 + ;
const int MAXQ = ;
int to[MAXM << ], nxt[MAXM << ], Head[MAXN], tot = ;
inline void addedge(int u, int v)
{
to[++tot] = v;
nxt[tot] = Head[u];
Head[u] = tot;
}
inline void read(int &v)
{
v = ;
char c = ;
int p = ;
while (c < '' || c > '')
{
if (c == '-')
{
p = -;
}
c = getchar();
}
while (c >= '' && c <= '')
{
v = (v << ) + (v << ) + c - '';
c = getchar();
}
v *= p;
}
int value[MAXN], visit[MAXN], ans[MAXM << ];
int dfs(int x)
{
int now = value[x];
visit[x] = ;
for (int i = Head[x]; i; i = nxt[i])
{
int v = to[i];
if (!visit[v])
{
int nownxt = dfs(v);
now += nownxt;
if (i & )
{
ans[i ^ ] = -nownxt;
}
else
{
ans[i] = nownxt;
}
}
}
return now;
}
int main()
{
ios_base::sync_with_stdio();
cin.tie(); int sum = ;
int n, m, u, v;
read(n);
for (int i = ; i <= n; i++)
{
read(value[i]);
sum += value[i];
}
read(m);
for (int i = ; i <= m; i++)
{
read(u), read(v);
addedge(u, v), addedge(v, u);
}
if (sum != )
{
printf("Impossible\n");
return ;
}
printf("Possible\n");
dfs();
for (int i = ; i <= m; i++)
{
printf("%d\n", ans[i << ]);
}
return ;
}

G

也是个暴力题..把GCD搞出来 然后看连通块就行了

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define RG register
#define MAX 222222
inline int read()
{
RG int x=,t=;RG char ch=getchar();
while((ch<''||ch>'')&&ch!='-')ch=getchar();
if(ch=='-')t=-,ch=getchar();
while(ch<=''&&ch>='')x=x*+ch-,ch=getchar();
return x*t;
}
struct Line{int v,next;}e[MAX<<];
int h[MAX],cnt=,mx;
inline void Add(int u,int v){e[cnt]=(Line){v,h[u]};h[u]=cnt++;}
vector<int> ys[MAX];
int n,a[MAX],tot;
bool book[MAX],vis[MAX];
ll ans[MAX];
void Div(int x,int id)
{
for(int i=,m=sqrt(x);i<=m;++i)
if(x%i==)
{
ys[i].push_back(id);
if(i*i!=x)ys[x/i].push_back(id);
}
}
void dfs(int u,int ff)
{
if(!book[u])return;
vis[u]=true;++tot;
for(int i=h[u];i;i=e[i].next)
if(e[i].v!=ff)dfs(e[i].v,u);
}
int main()
{
n=read();
for(int i=;i<=n;++i)mx=max(mx,a[i]=read());
for(int i=;i<=n;++i)Div(a[i],i);
for(int i=;i<n;++i)
{
int u=read(),v=read();
Add(u,v);Add(v,u);
}
for(int i=;i<=mx;++i)
{
for(int j=,l=ys[i].size();j<l;++j)
{
int v=ys[i][j];
vis[v]=false;book[v]=true;
}
for(int j=,l=ys[i].size();j<l;++j)
{
tot=;int v=ys[i][j];
if(!vis[v])dfs(v,);book[v]=false;
ans[i]+=1ll*tot*(tot-)/+tot;
}
}
for(int i=mx;i;--i)
if(ans[i])for(int j=i+i;j<=mx;j+=i)ans[i]-=ans[j];
for(int i=;i<=mx;++i)
if(ans[i])printf("%d %I64d\n",i,ans[i]);
return ;
}

最新文章

  1. Linux 发行版本及其基于
  2. FileUpload上传图片直接浏览显示(没有上传按钮如何上传)
  3. 绑定本地Service并与之通信-----之二
  4. [原]Hrbust1328 相等的最小公倍数 (筛素数,素因子分解)
  5. Sql 格式化工具
  6. PHP Filesystem
  7. 通过YAJL获取json中的值
  8. tornado学习 - TCPServer 实现聊天功能
  9. jquery使用CSS3实现文字动画效果插件Textillate.js
  10. 怎样通过js 取消input域的hidden属性使其变的可见
  11. Codeforces Round #452 F. Letters Removing
  12. elasticsearch(2) 数据操作——查询
  13. Nagios 监控 Mysql
  14. header 跳转时报错误。Header may not contain more than a single header, new line detected
  15. Internet Explorer 已限制此网页运行脚本或ActiveX控件。 允许阻止的内容(A)
  16. k8s系列~docker mysql
  17. linux每日命令(32):gzip命令
  18. php 中文字符串反转
  19. .NET设计模式 第二部分 创建型模式(2)—抽象工厂模式(Abstract Factory)
  20. 1.深入分析_NIO性能分析

热门文章

  1. 二、Java对返回参数进行处理(JSONObject,getJSONArray等)
  2. jquery绝对路径
  3. nodejs 之简单web服务器
  4. dcef3 基本使用经验总结
  5. Java Array数组 遍历 四种方式(包含 Lambda 表达式遍历)
  6. linux使用du查看文件夹大小
  7. 什么是lambda?有什么好处
  8. Java Stream流排序null以及获取指定条数数据
  9. opensuse终端命令行安装编码解码器
  10. gitlab ssh 免密登录