【2015上海赛区网络赛】(没有补完)

来源:互联网 发布:淘宝火速运动是正品吗 编辑:程序博客网 时间:2024/04/30 01:28

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 100005ll 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 200005struct 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;}


0 0
原创粉丝点击