标签:uva
给你n个毯子,m个人,并给你每条毯子厚的部分的长度和该厚的部分出现的周期;
求盖了0--n 个毯子的人数。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<string>
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<vector>
#include<stack>
#include<cstdlib>
#pragma comment(linker, "/STACK:1024000000")
#define root 1, n, 1
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1
#define intxt freopen("in.txt","r",stdin);
#define outtxt freopen("out.txt","w",stdout);
#define _LL __int64
#define LL long long
#define pi acos(-1.0)
#define PB push_back()
#define MP make_pair()
#define BG begin()
#define ED end()
#define clr(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define Mod 1e9+7
using namespace std;
const int MAX=1000005;
int A[MAX];
int arr[17][17];
int result[MAX];
int ans[MAX/10+10];
int main(){
#ifndef ONLINE_JUDGE
intxt;
outtxt;
#endif // ONLINE_JUDGE
int T;
cin>>T;
while(T--)
{
int n,m,a,b;
clr(arr,0);
clr(ans,0);
scanf("%d%d",&n,&m);
for(int i=0;i<=m;i++)
result[i]=0;
for(int i=0;i<n;i++){
scanf("%d%d",&a,&b);
arr[a][b]++;
}
// a>=1&&a<=16 b>=1&&b<=16
// 处理这道题Key: 每次找到铺开的开始位置和结束位置 用1 -1处理。
for(int i=1; i<=16; i++)
for(int j=1; j<=16; j++){
if(!arr[i][j]) continue;
for(int k=0; k<m; k+=j){
result[k]+=arr[i][j];
result[k+i]-=arr[i][j];
}
}
ans[result[0]]++;
for(int i=1; i<m; i++){
result[i]+=result[i-1];
ans[ result[i] ]++;
}
for(int i=0; i<=n ; i++)
printf("%d\n",ans[i]);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:uva
原文地址:http://blog.csdn.net/u013514722/article/details/47341783