链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
给定 n 个数对,对于每个数对 (x,y) 会持续执行以下操作直到 x=y:
- 当 x > y 时,x = x - y
- 当 x < y 时,y = y - x
同时有 q 次询问,每次给定一个数对 xq,yqx_q,y_qxq,yq, 问上述给定的 n 个数对的执行过程中出现了 xq,yqx_q,y_qxq,yq 的次数。
第一行一个正整数n,代表数对个数。
接下来n行,每行两个正整数(x,y)。
接下来一行输入一个正整数q,代表询问次数。
接下来q行,每行两个正整数(xq,yq)(x_q,y_q)(xq,yq)。
1≤n≤1×1031 \leq n \leq 1 \times 10^{3}1≤n≤1×103
1≤q≤1×1031 \leq q \leq 1 \times 10^{3}1≤q≤1×103
1≤x,y,xq,yq≤1×1041 \leq x,y,x_q,y_q \leq 1 \times 10^{4}1≤x,y,xq,yq≤1×104
输出n行,表示每次询问的答案。
示例1
复制6 5 10 8 9 5 7 8 9 1 5 2 6 3 7 1 5 5 3 6
6 5 10 8 9 5 7 8 9 1 5 2 6 3 7 1 5 5 3 6
复制
2 1 0
- #include<iostream>
- using namespace std;
- struct sd{
- int a,b;
- }con[1010];
- long long s[10010][10010]={};
- int main(){
- int n;
- cin>>n;
- for(int i=0;i<n;i++){
- cin>>con[i].a>>con[i].b;
- s[con[i].a][con[i].b]++;
- while(con[i].a!=con[i].b){
- if(con[i].a>con[i].b) con[i].a-=con[i].b;
- else con[i].b-=con[i].a;
- s[con[i].a][con[i].b]++;
- }
- }
- int q,x,y;
- cin>>q;
- while(q--){
- cin>>x>>y;
- cout<<s[x][y]<<endl;
- }
- return 0;
- }