A.2016

给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量:
1. 1≤a≤n,1≤b≤m;
2. a×b 是 2016 的倍数。

Input

 
输入包含不超过 30 组数据。
每组数据包含两个整数 n,m (1≤n,m≤10 9).
 

Output对于每组数据,输出一个整数表示满足条件的数量。Sample Input

32 63
2016 2016
1000000000 1000000000

Sample Output

1
30576
7523146895502644

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int vis[];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
memset(vis,,sizeof(vis));
ll ans=;
for(int i=;i>=;i--)
{
vis[i]+=n/i;
for(int j=i-;j>=;j--)
{
if(i%j==)
vis[j]-=vis[i];
}
ans+=1LL*vis[i]*(m/(/__gcd(,i)));
}
printf("%lld\n",ans);
}
}

B. 有向无环图

Bobo 有一个 n 个点,m 条边的有向无环图(即对于任意点 v,不存在从点 v 开始、点 v 结束的路径)。
为了方便,点用 1,2,…,n 编号。 设 count(x,y) 表示点 x 到点 y 不同的路径数量(规定 count(x,x)=0),Bobo 想知道
 
 
除以 (10 9+7) 的余数。
其中,a i,b j 是给定的数列。
 

Input

输入包含不超过 15 组数据。
每组数据的第一行包含两个整数 n,m (1≤n,m≤10 5).
接下来 n 行的第 i 行包含两个整数 a i,b i (0≤a i,b i≤10 9).
最后 m 行的第 i 行包含两个整数 u i,v i,代表一条从点 u i 到 v i 的边 (1≤u i,vi≤n)。
 

Output对于每组数据,输出一个整数表示要求的值。Sample Input

3 3
1 1
1 1
1 1
1 2
1 3
2 3
2 2
1 0
0 2
1 2
1 2
2 1
500000000 0
0 500000000
1 2

Sample Output

4
4
250000014

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int mod=1e9+;
const int maxn=1e5+;
ll a[maxn],b[maxn],s[maxn];
vector<int>G[maxn];
int in[maxn],n,m;
void work()
{
queue<int>P;
for(int i=;i<=n;i++)
{
if(in[i]==)
P.push(i);
}
while(!P.empty())
{
int v=P.front();P.pop();
for(int i=G[v].size()-;i>=;i--)
{
int u=G[v][i];
in[u]--;
if(in[u]==)
P.push(u);
s[u]=(s[u]+s[v])%mod;
}
}
ll ans=;
for(int i=;i<=n;i++)
ans=(ans+(s[i]-a[i]+mod)*b[i])%mod;
printf("%lld\n",ans);
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=;i<=n;i++)
{
scanf("%lld%lld",&a[i],&b[i]);
s[i]=a[i];
}
for(int i=;i<=m;i++)
{
int x,y;scanf("%d%d",&x,&y);
G[x].push_back(y);
in[y]++;
}
work();
for(int i=;i<=n;i++)
{
G[i].clear();
in[i]=;
}
}
return ;
}

G.Parentthesis

Bobo has a balanced parenthesis sequence P=p 1 p 2…p n of length n and q questions.
The i-th question is whether P remains balanced after p ai and p bi  swapped. Note that questions are individual so that they have no affect on others.
Parenthesis sequence S is balanced if and only if:
1.  S is empty;
2.  or there exists balanced parenthesis sequence A,B such that S=AB;
3.  or there exists balanced parenthesis sequence S' such that S=(S').

Input

The input contains at most 30 sets. For each set:
The first line contains two integers n,q (2≤n≤10 5,1≤q≤10 5).
The second line contains n characters p 1 p 2…p n.
The i-th of the last q lines contains 2 integers a i,b i (1≤a i,b i≤n,a i≠b i).

OutputFor each question, output " Yes" if P remains balanced, or " No" otherwise.Sample Input

4 2
(())
1 3
2 3
2 1
()
1 2

Sample Output

No
Yes
No

代码(括号匹配终于会啦):

#include <bits/stdc++.h>
using namespace std; const int maxn = 1e5 + ;
int N, Q;
string s;
int sum[maxn], vis[maxn], a[maxn]; int main() {
while(~scanf("%d%d", &N, &Q)) { memset(sum, , sizeof(sum));
cin >> s;
for(int i = ; s[i]; i ++) {
if(s[i] == '(') a[i] = ;
else a[i] = -;
} memset(vis, , sizeof(vis));
for(int i = ; s[i]; i ++) {
if(i == ) sum[i] = a[i];
else sum[i] = sum[i - ] + a[i];
} for(int q = ; q < Q; q ++) {
int l, r;
scanf("%d%d", &l, &r);
l -= , r -= ;
if(s[l] == s[r]) printf("Yes\n");
else {
if(s[r] == ')') if(sum[l] - < || sum[r] - < ) printf("No\n");
else printf("Yes\n");
}
}
} return ;
}

H. Reverse

Bobo has a n digits decimal number D=d 1 d 2…d n (It may have leading zeros).
Let R(i,j) denotes number D with digits between the i-th position and j-th position reversed. That is, R(i,j)=d 1…d i-1 d j d j-1…d i d j+1 d j+2…d n.
Bobo would like to find
modulo (10 9+7).

Input

The input contains at most 30 sets. For each set:
The first line contains an integer n (1≤n≤10 5).
The second line contains n digits d 1 d 2…d n (0≤d i≤9).

OutputFor each set, an integer denotes the result.Sample Input

2
12
3
012
10
0123456789

Sample Output

45
369
733424314

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int mod=1e9+;
ll pow1(ll a,ll b)
{
ll r=;
while(b)
{
if(b&)
r=r*a%mod;
a=a*a%mod;
b/=;
}
return r;
}
ll inv_9=pow1(,mod-);
ll p[];
char t[];
int main()
{
p[]=;
for(int i=;i<=;i++)
p[i]=p[i-]*%mod;
int n;
while(~scanf("%d",&n))
{
scanf("%s",t+);
reverse(t+,t+n+);
ll ans=;
for(int i=;i<=n;i++)
{
ll v=t[i]-'';
ans+=(1LL*(i-)+1LL*(i-)*(i-)/)%mod*v%mod*p[i-]%mod;
ans+=(1LL*(n-i)+1LL*(n-i)*(n-i-)/)%mod*v%mod*p[i-]%mod;
ans%=mod;
ll tmp=v*(p[i]-+mod)%mod*inv_9%mod;
tmp=tmp*(p[n-i+]-+mod)%mod*inv_9%mod;
ans+=tmp;
ans%=mod;
}
printf("%lld\n",ans);
}
return ;
}

I.Tree Intersection

Bobo has a tree with n vertices numbered by 1,2,…,n and (n-1) edges. The i-th vertex has color c i, and the i-th edge connects vertices a i and b i.
Let C(x,y) denotes the set of colors in subtree rooted at vertex x deleting edge (x,y).
Bobo would like to know R_i which is the size of intersection of C(a i,b i) and C(bi,a i) for all 1≤i≤(n-1). (i.e. |C(a i,b i)∩C(b i,a i)|)

Input

The input contains at most 15 sets. For each set:
The first line contains an integer n (2≤n≤10 5).
The second line contains n integers c 1,c 2,…,c n (1≤c_i≤n).
The i-th of the last (n-1) lines contains 2 integers a i,b i (1≤a i,b i≤n).

OutputFor each set, (n-1) integers R 1,R 2,…,R n-1.Sample Input

4
1 2 2 1
1 2
2 3
3 4
5
1 1 2 1 2
1 3
2 3
3 5
4 5

Sample Output

1
2
1
1
1
2
1

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+;
vector<int>G[maxn],id[maxn];
int a[maxn],ans[maxn],s[maxn],now[maxn],son[maxn],sz[maxn],cnt;
void get_son(int v,int fa)
{
sz[v]=;
son[v]=;
for(int i=G[v].size()-;i>=;i--)
{
int u=G[v][i];
if(u==fa)
continue;
get_son(u,v);
sz[v]+=sz[u];
if(sz[u]>sz[son[v]])
son[v]=u;
}
}
void work1(int v,int fa)
{
now[a[v]]++;
if(now[a[v]]==&&s[a[v]]>)
cnt++;
else if(now[a[v]]==s[a[v]]&&now[a[v]]>)
cnt--;
for(int i=G[v].size()-;i>=;i--)
{
int u=G[v][i];
if(u==fa)
continue;
work1(u,v);
}
}
void work2(int v,int fa)
{
now[a[v]]--;
if(now[a[v]]==&&s[a[v]]>)
cnt--;
else if(now[a[v]]==s[a[v]]-&&now[a[v]]>)
cnt++;
for(int i=G[v].size()-;i>=;i--)
{
int u=G[v][i];
if(u==fa)
continue;
work2(u,v);
}
}
void dfs(int v,int fa,int flag,int q)
{
int I;
for(int i=G[v].size()-;i>=;i--)
{
int u=G[v][i];
if(u==son[v])
I=id[v][i];
if(u==fa||u==son[v])
continue;
dfs(u,v,,id[v][i]);
}
if(son[v])
dfs(son[v],v,,I);
for(int i=G[v].size()-;i>=;i--)
{
int u=G[v][i];
if(u==fa||u==son[v])
continue;
work1(u,v);
}
now[a[v]]++;
if(now[a[v]]==&&s[a[v]]>)
cnt++;
else if(now[a[v]]==s[a[v]]&&now[a[v]]>)
cnt--;
ans[q]=cnt;
if(flag==)
work2(v,fa);
}
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(s,,sizeof(s));
memset(now,,sizeof(now));
for(int i=;i<=n;i++)
scanf("%d",&a[i]),s[a[i]]++;
for(int i=,x,y;i<n;i++)
{
scanf("%d%d",&x,&y);
G[x].push_back(y);
id[x].push_back(i);
G[y].push_back(x);
id[y].push_back(i);
}
get_son(,);
cnt=;
dfs(,,,);
for(int i=;i<=n;i++)
{
G[i].clear();
id[i].clear();
if(i<n)
printf("%d\n",ans[i]);
ans[i]=;
}
}
}

J.三角形和矩形

Bobo 有一个三角形和一个矩形,他想求他们交的面积。
具体地,三角形和矩形由 8 个整数 x 1,y 1,x 2,y 2,x 3,y 3,x 4,y 4 描述。 表示三角形的顶点坐标是 (x 1,y 1),(x 1,y 2),(x 2,y 1), 矩形的顶点坐标是 (x 3,y 3),(x 3,y 4),(x 4,y4),(x 4,y 3).

Input

输入包含不超过 30000 组数据。
每组数据的第一行包含 4 个整数 x 1,y 1,x 2,y 2 (x 1≠x 2,y 1≠y 2).
第二行包含 4 个整数 x 3,y 3,x 4,y 4 (x 3<x 4,y 3<y 4).
(0≤x i,y i≤10 4)

Output对于每组数据,输出一个实数表示交的面积。绝对误差或相对误差小于 10 -6 即认为正确。Sample Input

1 1 3 3
0 0 2 2
0 3 3 1
0 0 2 2
4462 1420 2060 2969
4159 257 8787 2970

Sample Output

1.00000000
0.75000000
439744.13967527

代码:

#include<bits/stdc++.h>
using namespace std;
double k,b;
double cal1(double Y1,double Y2,double y,double xx1,double xx2)
{
if(y>=Y2) return ;
double h=(y-b)/k;
if(y>=Y1&&y<Y2)
return (xx2-h)*(Y2-y)*0.5;
return ((Y1-y)+(Y2-y))*(xx2-xx1)*0.5;
}
double cal2(double Y1,double Y2,double y,double xx1,double xx2)
{
if(y<=Y2) return ;
double h=(y-b)/k;
if(y>Y2&&y<=Y1)
return (y-Y2)*(xx2-h)*0.5;
return ((y-Y1)+(y-Y2))*(xx2-xx1)*0.5;
}
double cal3(double Y1,double Y2,double y,double xx1,double xx2)
{
if(y>=Y1) return ;
double h=(y-b)/k;
if(y>=Y2&&y<Y1)
return (Y1-y)*(h-xx1)*0.5;
return ((Y1-y)+(Y2-y))*(xx2-xx1)*0.5;
}
double cal4(double Y1,double Y2,double y,double xx1,double xx2)
{
if(y<=Y1) return ;
double h=(y-b)/k;
if(y>Y1&&y<=Y2)
return (y-Y1)*(h-xx1)*0.5;
return ((y-Y1)+(y-Y2))*(xx2-xx1)*0.5;
}
int main()
{
int x1,y1,x2,y2,x3,y3,x4,y4;
while(~scanf("%d%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4))
{
int xx1=max(min(x1,x2),x3),xx2=min(max(x1,x2),x4);
int yy1=max(min(y1,y2),y3),yy2=min(max(y1,y2),y4);
k=1.0*(y2-y1)/(x1-x2),b=1.0*y2-k*x1;
if(xx1>=xx2||yy1>=yy2)
printf("0.0000000000000\n");
else if(y2>y1&&x1>x2)
{
double Y1=k*xx1+b,Y2=k*xx2+b;
double ans=cal1(Y1,Y2,1.0*yy1,1.0*xx1,1.0*xx2)-cal1(Y1,Y2,1.0*yy2,1.0*xx1,1.0*xx2);
printf("%.10lf\n",ans);
}
else if(y2<y1&&x2<x1)
{
double Y1=k*xx1+b,Y2=k*xx2+b;
double ans=cal2(Y1,Y2,1.0*yy2,1.0*xx1,1.0*xx2)-cal2(Y1,Y2,1.0*yy1,1.0*xx1,1.0*xx2);
printf("%.10lf\n",ans);
}
else if(x2>x1&&y2>y1)
{
double Y1=k*xx1+b,Y2=k*xx2+b;
double ans=cal3(Y1,Y2,1.0*yy1,1.0*xx1,1.0*xx2)-cal3(Y1,Y2,1.0*yy2,1.0*xx1,1.0*xx2);
printf("%.10lf\n",ans);
}
else
{
double Y1=k*xx1+b,Y2=k*xx2+b;
double ans=cal4(Y1,Y2,1.0*yy2,1.0*xx1,1.0*xx2)-cal4(Y1,Y2,1.0*yy1,1.0*xx1,1.0*xx2);
printf("%.10lf\n",ans);
}
}
}

明天省赛 加油啦 希望有好结果

今日份的瘦宅茶

喜茶最近出的芝芝桃桃和多肉粉荔都没时间去喝!!!不是合格的 HEYTEA Girl 了!!!快放假吧

2016湖南省赛 [Cloned]的更多相关文章

  1. 2016湖南省赛----G - Parenthesis (括号匹配)

    2016湖南省赛----G - Parenthesis (括号匹配)   Bobo has a balanced parenthesis sequence P=p 1 p 2…p n of lengt ...

  2. 2016湖南省赛----A 2016 (同余定理)

    2016湖南省赛----A 2016 (同余定理) Description  给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量: 1. 1≤a≤n,1≤b≤m; 2. a×b 是 ...

  3. 2016湖南省赛 I Tree Intersection(线段树合并,树链剖分)

    2016湖南省赛 I Tree Intersection(线段树合并,树链剖分) 传送门:https://ac.nowcoder.com/acm/contest/1112/I 题意: 给你一个n个结点 ...

  4. 2016湖南省赛--A题--2016

    2016 [TOC] Description 给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量: 1. 1≤a≤n,1≤b≤m; 2. a×b 是 2016 的倍数. Input ...

  5. 2016湖南省赛 A 2016 题解(同余)

    题目链接 题目大意 给出正整数 n 和 m,统计满足以下条件的正整数对 (a, b) 的数量: 1<=a<=n 1<=b<=m a*b%2016=0 题目思路 我本来以为是容斥 ...

  6. 2017 湖南省赛 K Football Training Camp

    2017 湖南省赛 K Football Training Camp 题意: 在一次足球联合训练中一共有\(n\)支队伍相互进行了若干场比赛. 对于每场比赛,赢了的队伍得3分,输了的队伍不得分,如果为 ...

  7. hdu6578 2019湖南省赛D题Modulo Nine 经典dp

    目录 题目 解析 AC_Code @ 题目 第一题题意是一共有{0,1,2,3}四种数字供选择,问有多少个长度为n的序列满足所有m个条件,每个条件是说区间[L,R]内必须有恰好x个不同的数字. 第二题 ...

  8. ## [湖南省赛2019]Findme ###

    [湖南省赛2019]Findme 1.题目概述 2.解题过程 010打开这几张图片 先简单分析一下这几张图片 简单分析 1.png 从外观上,1.png明显高度太低,需要更改 2.png 2.png末 ...

  9. CSU 1803 2016 湖南省2016省赛

    1803: 2016 Submit Page   Summary   Time Limit: 5 Sec     Memory Limit: 128 Mb     Submitted: 1416    ...

随机推荐

  1. 【视频】ASP.NET Core MVC 2.* 入门

    比较初级的入门教程,网址在B站:https://www.bilibili.com/video/av33728783/ 内容如下: 1. ASP.NET Core 简介和开发工具 2. ASP.NET ...

  2. Spring:(一)入门基础学习

    前述 因为前几日刚刚学完Spring的基础,因此写一篇博客整理一下相关的基础知识. 什么是Spring? Spring 是一个轻量级的 DI / IoC 和 AOP 容器的开源框架,帮助分离项目组件之 ...

  3. Session的使用与Session共享问题

    Session的使用与Session共享问题 Session方法 getId():获取sessionId,这个id不一定是数字,比方说它用字符串来表示唯一标识,所以它返回值是String; boole ...

  4. Spring学习(二):Spring支持的5种Bean Scope

    序言 Scope是定义Spring如何创建bean的实例的.Spring容器最初提供了两种bean的scope类型:singleton和prototype,但发布2.0以后,又引入了另外三种scope ...

  5. 痞子衡嵌入式:开启NXP-MCUBootUtility工具的HAB加密功能 - CST(中英双语)

    1 Reason for enabling HAB encryption function 为什么要开启HAB加密功能 NXP-MCUBootUtility is a tool designed fo ...

  6. SLAM+语音机器人DIY系列:(三)感知与大脑——4.音响麦克风与摄像头

    摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...

  7. 关于获取资源文件,Class.getResource和ClassLoader.getResource的区别

    原文同步发表至个人博客[夜月归途] 原文链接:http://www.guitu18.com/se/java/2019-02-22/29.html 作者:夜月归途 出处:http://www.guitu ...

  8. json属性名必须加引号的讨论

    优质参考资料: 1.https://blog.csdn.net/Goskalrie/article/details/52151175 2.https://blog.csdn.net/weixin_42 ...

  9. WebAPI Angularjs 上传文件

    直接上代码 HTML页面代码: <label>资源URL</label> <input type="text" class="form-co ...

  10. 使用jQuery增加或删除元素(内容)

    使用jQuery增加或删除元素(内容):一.jQuery添加元素或内容:1,append() 方法:在被选元素的结尾插入元素或内容 2,prepend() 方法:被选元素的开头插入元素或内容. 3,a ...