01(A) HDU 5468 Puzzled Elena
02(B) HDU 5469 Antonidas
03(C) HDU 5470 Typewriter
04(D) HDU 5471 Count the Grid
05(E) HDU 5472 Code Formatting
06(F) HDU 5473 There was a kingdom
07(G) HDU 5474 A simple graph problem
08(H) HDU 5475 An easy problem
(用线段树维护一下就可以了,树的最后一层一共n个节点,一开始整棵树每个节点的值都是1,然后相应的维护,更新)
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
#define ll __int64
#define inf 100005
ll m;
ll s[inf];
struct node
{
int l,r;
ll ans;
}p[inf*4];
void build(int u,int l,int r)
{
p[u].l=l;
p[u].r=r;
p[u].ans=1;
if(l==r) return;
int mid=(l+r)>>1;
build(u<<1,l,mid);
build(u*2+1,mid+1,r);
}
void update(int u,int l,int r,int id,int ss)
{
if(id==l && l==r)
{
p[u].ans=(ll)ss;
return;
}
int mid=(l+r)>>1;
if(id<=mid) update(u<<1,l,mid,id,ss);
else update(u*2+1,mid+1,r,id,ss);
p[u].ans=(p[u<<1].ans*p[u*2+1].ans)%m;
}
int main()
{
int t,cas=1;
scanf("%d",&t);
while(t--)
{
int n,id,x;
scanf("%d%I64d",&n,&m);
printf("Case #%d:\n",cas++);
build(1,1,n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&id,&x);
if(id==1) update(1,1,n,i,x);
else update(1,1,n,x,1);
printf("%I64d\n",p[1].ans);
}
}
return 0;
}
09(I) HDU 5476 Explore Track of Point
10(J) HDU 5477 A Sweet Journey
开vis[ ],沼泽地为1,公寓是0
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
int vis[100005];
int main()
{
int t;
scanf("%d",&t);
int cas=1;
while(t--)
{
int n,a,b,l;
memset(vis,0,sizeof(vis));
scanf("%d%d%d%d",&n,&a,&b,&l);
for(int i=0;i<n;i++)
{
int li,ri;
scanf("%d%d",&li,&ri);
for(int j=li;j<ri;j++) vis[j]=1;
}
int ans=0,sum=0;
for(int i=0;i<l;i++)
{
if(vis[i]==0) ans+=b;
else ans-=a;
if(ans<0)
{
sum+=ans;
ans=0;
}
}
printf("Case #%d: %d\n",cas++,-sum);
}
return 0;
}
11(K) HDU 5478 Can you find it
(这题先让n=1,枚举a,算出b,分别记录合法的数据,然后在通过n=2,3,4,5,……逐一排除)
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
#define ll __int64
#define inf 200005
struct node
{
ll ai,bi;
}p[inf],ss[inf];
ll mul(ll x,ll n,ll c)
{
int ans=1;
while(n)
{
if(n&1) ans=(ans*x)%c;
x=(x*x)%c;
n>>=1;
}
return ans;
}
bool cmp(node a,node b)
{
return a.ai<b.ai;
}
int main()
{
ll c,k1,b1,k2;
int cas=1;
while(~scanf("%I64d%I64d%I64d%I64d",&c,&k1,&b1,&k2))
{
int l=0;
for(ll i=1;i<c;i++)
{
ll ans=mul(i,k1+b1,c);
if(ans==0) continue;
l++;
p[l].ai=i;
p[l].bi=c-ans;
}
int li=0;
for(int j=1;j<=l;j++)
{
int flag=1;
for(int i=2;i<=1000;i++)
{
if((mul(p[j].ai,k1*i+b1,c)+mul(p[j].bi,k2*i-k2+1,c))%c>0)
{
flag=0;
break;
}
}
if(flag==1)
{
li++;
ss[li].ai=p[j].ai;
ss[li].bi=p[j].bi;
}
}
printf("Case #%d:\n",cas++);
if(li==0) printf("-1\n");
else
{
sort(ss+1,ss+1+li,cmp);
for(int i=1;i<=li;i++)
{
printf("%I64d %I64d\n",ss[i].ai,ss[i].bi);
}
}
}
return 0;
}