UESTC 2016 Summer Training #4 Div.2(未完待续)

来源:互联网 发布:电子商务数据加密技术 编辑:程序博客网 时间:2024/06/11 08:52

A

include <bits/stdc++.h>#define INF 0x3f3f3f3f#define eps 1e-6typedef long long LL;const double pi = acos(-1.0);const long long mod = 1e9 + 7;using namespace std;int a[105][105];int main(){    int M,N;    cin >> N >> M;    for(int i = 1;i <= N;i++)        for(int j = 1;j <= M;j++)            cin >> a[i][j];    int ANS = INF;    int mina = 0,minb = 0;    for(int i = 1;i <= N;i++)        for(int j = 1;j <= M;j++)        {            if(i == j)                continue;            int A = 0,B = 0,C = 0,D = 0;            for(int k = 1;k <= N;k++)            {                if(a[k][i] == 1 && a[k][j] == 1)                    A++;                else if(a[k][i] == 1)                    B++;                else if(a[k][j] == 1)                    C++;                else                    D++;            }            int ans = 0;            ans = max(ans,A);            ans = max(ans,B);            ans = max(ans,C);            ans = max(ans,D);            if(ans < ANS)            {                ANS = ans;                mina = i;                minb = j;            }        }    printf("%d\n",ANS);    printf("%d %d\n",mina,minb);    return 0;}

B

#include <bits/stdc++.h>#define INF 0x3f3f3f3f#define eps 1e-6typedef long long LL;const double pi = acos(-1.0);const long long mod = 25 * 1E8;using namespace std;int fun(int i){    int j = 2;    while(i >= j)    {        i -= (i / j);        j++;    }    return i;}int main(){    int l,r;    cin >> l >> r;    int ans = fun(r) - fun(l - 1);    //printf("%d %d\n",fun(r),fun(l - 1));    printf("%d\n",ans);    return 0;}

C

#include<cstdio>#define N 200005int n,m,ux,uy,ax,ay,a[N],u[N],ck,ans,fx[4]= {1,-1,0,0},fy[4]= {0,0,1,-1};char c;void dfs(int x,int y,int s){    if(x==ux&&y==uy&&s>2||x==ax&&y==ay)//走回起点(s是第几步)或走到终点        ans++;    if(u[x*m-m+y]||ans>2||ans&&ck)return;    u[x*m-m+y]=1;    int r=0;    for(int i=0;i<4;i++){        int nx=x+fx[i];        int ny=y+fy[i];        if(nx&&nx<=n&&ny&&ny<=m&&a[nx*m-m+ny]){            r++;//点的度            if(r>2)ck=1;            dfs(nx,ny,s+1);        }    }}int main(){    scanf("%d%d ",&n,&m);    for(int i=1; i<=n; i++)    {        for(int j=1; j<=m; j++)        {            c=getchar();            if(c!='#')                a[i*m-m+j]=1;            if(c=='1')            {                ux=i;                uy=j;            }            else if(c=='2')            {                ax=i;                ay=j;            }        }        getchar();    }    dfs(ux,uy,0);    if(ans>2||ans&&ck)printf("YES");    else printf("NO");    return 0;}

D

#include <cstdio>#include <cstring>#include <cstdlib>#include <algorithm>using namespace std;const int maxn = 1e5 * 2 + 10;char buf[maxn];int cha[26];int ql[maxn], qr[maxn];void init(int len, int k){    memset(qr, -1, sizeof qr);    int l = len, ct = 0;    for (int i = len ; i > 0 ; i--)    {        while(ct < k && l > 0)        {            if (!cha[buf[l] - 'a'])                ct++;            cha[buf[l] - 'a']++;            --l;        }        if (ct == k)            qr[i] = l + 1;        if (--cha[buf[i] - 'a'] == 0)            --ct;    }    memset(cha, 0, sizeof cha);    memset(ql, -1, sizeof ql);    l = len, ct = 0;    for (int i = len ; i > 0 ; i--)    {        while(ct <= k && l > 0)        {            if (!cha[buf[l] - 'a'])                ct++;            cha[buf[l] - 'a']++;            --l;        }        if (ct == k + 1)            ql[i] = l + 2;        else if (ct == k && l == 0)            ql[i] = l + 1;        if (--cha[buf[i] - 'a'] == 0)            --ct;    }}struct tree{    int num;    int m;}t[maxn * 4];void build(int l, int r, int p){    t[p].num = maxn;    if (l == r)        return;    t[p].m = (l + r) / 2;    build(l, t[p].m, 2 * p);    build(t[p].m + 1, r, 2 * p + 1);}int query(int l, int r, int ll, int rr, int p){    if (l == ll && r == rr)        return t[p].num;    if (ll > t[p].m)        return query(t[p].m + 1, r, ll, rr, 2 * p + 1);    else if (rr <= t[p].m)        return query(l, t[p].m, ll, rr, 2 * p);    return min(        query(l, t[p].m, ll, t[p].m, 2 * p),        query(t[p].m + 1, r, t[p].m + 1, rr, 2 * p + 1));}void modify(int l, int r, int p, int pp, int num){    if (l == r)    {        t[p].num = num;        return;    }    if (pp <= t[p].m)        modify(l, t[p].m, 2 * p , pp, num);    else        modify(t[p].m + 1, r, 2*p + 1, pp, num);    t[p].num = min(t[p].num, num);}int main(){    int k, len;    scanf("%d%s", &k, buf + 1);    len = strlen(buf + 1);    init(len, k);    build(0, len, 1);    for (int i = 1 ; i <= len ; i++)    {        int ans = -1;        if (ql[i] == 1)            modify(0, len, 1, i, ans = 1);        else if (ql[i] != -1)        {            ans = query(0, len, ql[i] - 1, qr[i] - 1, 1);            //printf("%d\n", ans);            if (ans != maxn)                modify(0, len, 1, i, ++ans);            else                ans = -1;        }        printf("%d ", ans);    }    return 0;}

G

#include <bits/stdc++.h>#define INF 0x3f3f3f3f#define eps 1e-6typedef long long LL;const double pi = acos(-1.0);const long long mod = 25 * 1E8;using namespace std;int main(){    double x1,y1,x2,y2;    double a1,b1,a2,b2;    scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);    scanf("%lf %lf %lf %lf",&a1,&b1,&a2,&b2);    double a = (a1 - a2) * (a1 - a2) + (b1 - b2) * (b1 - b2);    double b = (b2 - b1) * (y2 - y1) + (a2 - a1) * (x2 - x1);    b *= 2;    double c = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);    double ans = (4 * a * c - b * b) / (4 * a);    if(b * a < 0)        printf("%.15f\n",sqrt(ans));    else        printf("%.15f\n",sqrt(c));    return 0;}

H

#include <bits/stdc++.h>  using namespace std;  const int N=1e5+10;  int a[2*N], b[2*N], t[2*N], r[2*N];  int main()  {      int n, m;      scanf("%d%d", &n, &m);      for(int i=1; i<=n; i++)       {          scanf("%d", &a[i]);          b[i] = a[i];      }      int ti, ri, len=0;      for(int i=0; i<m; i++)      {          scanf("%d%d", &ti, &ri);          while(len && ri>=r[len-1]) len--;          t[len]=ti, r[len]=ri, len++;      }      r[len++]=0;      sort(b+1, b+1+r[0]);      int lb=1, rb=r[0];      for(int i=1; i<len; i++)      {          for(int j=r[i-1]; j>r[i]; j--)          {              if(t[i-1]==1) a[j]=b[rb--];              else a[j]=b[lb++];          }       }      printf("%d", a[1]);      for(int i=2; i<=n; i++)      {          printf(" %d", a[i]);      }      printf("\n");      return 0;  }  

I

#include <bits/stdc++.h>#define INF 0x3f3f3f3f#define eps 1e-6typedef long long LL;const double pi = acos(-1.0);const long long mod = 1e9 + 7;using namespace std;struct point  {      int id,x,y;      bool operator <(point a)const      {          return y < a.y;      }  };  vector <point> bx[1010];  int main()  {      int n;      scanf("%d",&n);      for(int i=1;i<=n;i++)      {          point t;          scanf("%d%d",&t.x,&t.y);          t.id=i;          bx[t.x/1000].push_back(t);      }      bool flag=0;      for(int i=0;i<=1000;i++)      {          sort(bx[i].begin(),bx[i].end());          if(bx[i].size())          {              int len=bx[i].size();              if(!flag)                  for(int j=0;j<len;j++)                      printf("%d ",bx[i][j].id);              else                  for(int j=len-1;j>-1;j--)                      printf("%d ",bx[i][j].id);              flag^=1;          }      }  }  

J

#include<bits/stdc++.h>using namespace std;typedef pair<int,int>   II;typedef vector< II >      VII;typedef vector<int>     VI;typedef vector< VI >    VVI;typedef long long int   LL;#define PB push_back#define MP make_pair#define F first#define S second#define SZ(a) (int)(a.size())#define ALL(a) a.begin(),a.end()#define SET(a,b) memset(a,b,sizeof(a))#define si(n) scanf("%d",&n)#define dout(n) printf("%d\n",n)#define sll(n) scanf("%lld",&n)#define lldout(n) printf("%lld\n",n)#define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL)#define TRACE#ifdef TRACE#define trace(...) __f(#__VA_ARGS__, __VA_ARGS__)template <typename Arg1>void __f(const char* name, Arg1&& arg1){    cerr << name << " : " << arg1 << std::endl;}template <typename Arg1, typename... Args>void __f(const char* names, Arg1&& arg1, Args&&... args){    const char* comma = strchr(names + 1, ',');cerr.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...);}#else#define trace(...)#endif//FILE *fin = freopen("in","r",stdin);//FILE *fout = freopen("out","w",stdout);const int N=2000005;const int M=100000000;const int K=30;const LL MOD=1000000007;VI prim[N];int vis[N];LL fact[K],invfact[K];LL powmod(LL a,LL b){    if(b==0)        return 1;    LL ret=powmod(a,b/2);    ret=(ret*ret)%MOD;    if(b%2==1)    {        ret=(ret*a)%MOD;    }    return ret;}LL ncr(int n,int r){    LL ret=1;    if(n>=(int)MOD)        return 0;    for(int i=0;i<r;i++)    {        ret=(ret*1LL*(n-i))%MOD;    }    ret=(ret*invfact[r])%MOD;    return ret;}void pre(){    for(int i=2;i<N;i++)        if(!vis[i])            for(int j=i;j<N;j+=i)            {                vis[j]=1;                prim[j].PB(i);            }    fact[0]=1ll;    invfact[0]=1;    for(int i=1;i<K;i++)    {        fact[i]=(fact[i-1]*1LL*i)%MOD;        invfact[i]=powmod(fact[i],MOD-2);    }    return;}int main(){    fast_io;    pre();    int t;    cin>>t;    while(t--)    {        int n,m,z;        cin>>n>>z;        m=n;        LL ans=1;        for(int i=0;i<SZ(prim[n]);i++)        {            int p=prim[n][i];            int ct=0;            while(m%p==0)            {                ct++;                m=m/p;            }            ans=(ans*ncr(ct+z-1,ct))%MOD;        }        cout<<ans<<"\n";    }    return 0;}
0 0
原创粉丝点击