2018 Multi-University Training Contest 4

Problem A. Integers Exhibition

找出所有非$233-mogic$数,初始化只有$1$,每次枚举一个素数去暴力它的幂

对这样生成的所有数,从小到大,维护因子数最多的$234$个,如果有$234$个数因子比它多这个数就删掉

最后再统计一遍所有非$0-mogic$到非$233-mogic$数

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 const LL MAXN = 1000000000001000000LL;
 5 map<LL, LL> mp, cd;
 6 map<LL, LL> :: iterator it;
 7 priority_queue<LL> pq;
 8 vector<LL> v[234];
 9 
10 bool pr(int i) {
11     for (int j = 2; j < i; ++j)
12         if (i % j == 0) return false;
13     return true;
14 }
15 
16 // BIT
17 int c[103682];
18 int lowbit(int s) {
19     return s & (-s);
20 }
21 void modify(int i, int x) {
22     while (i < 103682) c[i] += x, i += lowbit(i);
23     return;
24 }
25 int query(int i) {
26     int ret = 0;
27     while (i > 0) ret += c[i], i -= lowbit(i);
28     return ret;
29 }
30 
31 int main() {
32     mp[1] = 1;
33     for(int i = 2; i <= 293; ++i) {
34         if(!pr(i)) continue;
35         cd.clear();
36         for(it = mp.begin(); it != mp.end(); ++it) {
37             LL fi = (*it).first, se = (*it).second, p = 0;
38             cd[fi] = se;
39             for(LL j = fi; j <= MAXN / i; j *= i) {
40                 cd[j * i] = se * (++p + 1);
41             }
42         }
43         mp.clear();
44         while(!pq.empty()) pq.pop();
45         for(it = cd.begin(); it != cd.end(); ++it) {
46             LL fi = (*it).first, se = (*it).second;
47             if(pq.size() < 234 || -pq.top() <= se) {
48                 pq.push(-se);
49                 if(pq.size() > 234) pq.pop();
50                 mp[fi] = se;
51             }
52         }
53     }
54     for(it = mp.begin(); it != mp.end(); ++it) {
55         LL fi = (*it).first, se = (*it).second;
56         int x = query(103680 - se);
57         for(int i = x; i <= 233; ++i) v[i].push_back(fi);
58         modify(103681 - se, 1);
59     }
60     int T;
61     scanf("%d", &T);
62     while(T--) {
63         LL N, K;
64         scanf("%lld %lld", &N, &K);
65         LL l = 1, r = MAXN;
66         while(l < r) {
67             LL m = (l + r) / 2;
68             LL o = upper_bound(v[K].begin(), v[K].end(), m) - v[K].begin();
69             if(m - o >= N) r = m;
70             else l = m + 1;
71         }
72         printf("%lld\n", r);
73     }
74     return 0;
75 }
Aguin

 

Problem B. Harvest of Apples

取根号行把每项都打出来,然后每个询问往左上角跳至多根号步,惨遭卡常

  1 #include<bits/stdc++.h>
  2 using namespace std;
  3 long long a[100010],b[100010],c[600][100010],d[100010],e[100010];
  4 long long T,n,m,i,j,k,s,t,x,p1,p2,temp,ans,mod=1e9+7,v;
  5 namespace fastIO{
  6 #define BUF_SIZE 100000
  7 #define OUT_SIZE 100000
  8 #define ll long long
  9     //fread->read
 10     bool IOerror=0;
 11     inline char nc(){
 12         static char buf[BUF_SIZE],*p1=buf+BUF_SIZE,*pend=buf+BUF_SIZE;
 13         if (p1==pend){
 14             p1=buf; pend=buf+fread(buf,1,BUF_SIZE,stdin);
 15             if (pend==p1){IOerror=1;return -1;}
 16             //{printf("IO error!\n");system("pause");for (;;);exit(0);}
 17         }
 18         return *p1++;
 19     }
 20     inline bool blank(char ch){return ch==' '||ch=='\n'||ch=='\r'||ch=='\t';}
 21     inline void read(long long &x){
 22         bool sign=0; char ch=nc(); x=0;
 23         for (;blank(ch);ch=nc());
 24         if (IOerror)return;
 25         if (ch=='-')sign=1,ch=nc();
 26         for (;ch>='0'&&ch<='9';ch=nc())x=x*10+ch-'0';
 27         if (sign)x=-x;
 28     }
 29 #undef ll
 30 #undef OUT_SIZE
 31 #undef BUF_SIZE
 32 };
 33 using namespace fastIO;
 34 long long ksm(long long x,long long y,long long mod)
 35 {
 36     long long temp=1;
 37     while (y>0)
 38     {
 39         if (y%2==1) temp=temp*x%mod;
 40         y/=2;
 41         x=x*x%mod;
 42     }
 43     return temp;
 44 }
 45 int main()
 46 {
 47 //    clock_t startTime,endTime;
 48 //    startTime = clock();
 49 //    freopen("data.txt", "r", stdin);
 50 //    freopen("ans.txt", "w", stdout);
 51     // a fac
 52     // b inv_fac
 53     // c [.. ,...]
 54     // d inv
 55     // e pow(2, )
 56     e[0]=d[0]=a[0]=b[0]=1;
 57     for (i=1;i<=1e5;i++)
 58     {
 59         d[i]=ksm(i,mod-2,mod);
 60         a[i]=a[i-1]*i%mod;
 61         b[i]=b[i-1]*d[i]%mod;
 62         e[i]=e[i-1]*2%mod;
 63     }
 64     // size
 65     temp=279;
 66     for (i=1;i<=100000/temp;i++)
 67     {
 68         c[i][0]=1;t=1;s=i*temp;
 69         for (j=1;j<=(s+1)/2;j++)
 70         {
 71             t=t*(s-j+1)%mod;
 72             t=t*d[j]%mod;
 73             c[i][j]=c[i][j-1]+t;
 74             if(c[i][j] >= mod) c[i][j] -= mod;
 75         }
 76         for (j=(s+1)/2+1;j<s;j++)
 77         {
 78                 c[i][j]=e[s]-c[i][s-j-1];
 79                 if(c[i][j] <0) c[i][j] += mod;
 80         }
 81         c[i][s]=e[s];
 82     }
 83 //    endTime = clock();
 84 //    cout << "Totle Time : " <<(double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
 85 
 86 
 87     scanf("%lld", &T);
 88     // read(T);
 89     while (T--)
 90     {
 91         scanf("%lld %lld", &n, &m);
 92         // read(n);read(m);
 93         if (n==m)
 94         {
 95             printf("%lld\n",e[n]);
 96             continue;
 97         }
 98         ans=0;i=n;v=0;
 99         while (i%temp!=0&&m>0)
100         {
101             s=a[i-1]*b[m]%mod;
102             s=s*b[i-1-m]%mod;
103             ans=(ans+e[v]*s)%mod;
104             v++;
105             i--;m--;
106         }
107         if (m==0) ans=(ans+e[v])%mod;
108         else
109         {
110             k=i/temp;
111             ans=(ans+c[k][m]*e[v])%mod;
112         }
113         printf("%lld\n",ans);
114     }
115 //    endTime = clock();
116 //    cout << "Totle Time : " <<(double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
117 }
谈学姐

 

Problem C. Problems on a Tree

感觉没有那么好做阿?

维护每个$1/2$连通块和大小,全$1$连通块和大小,以及全$1$连通块子树中只隔一个$3$的$1/2$连通块大小之和

询问一查询一下$t$所在$1/2$连通块和$s$所在的全$1$连通块是否只隔一条$3$边,是的话必定一个是另一个的父亲

询问二的贡献有三部分,$s$所在的全$1$块大小,$s$所在的子树中只隔一条$3$边的$1/2$块大小之和,若$s$所在全$1$块的父边是$3$还要加上父亲的$1/2$块大小

当$3$变为$2$时,先对两个块的父亲所在全$1$块中删去子树隔一条$3$边的$1/2$块大小贡献,合并两个块再加回去

当$2$变为$1$时,两个全$1$块的子树中只隔一条$3$边的$1/2$块大小贡献也要合并

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 1e5 + 10;
 4 typedef pair<int, int> pii;
 5 map<pii, int> mp;
 6 map<pii, int> :: iterator it;
 7 vector<int> G[maxn];
 8 
 9 int F[maxn], D[maxn], c[maxn];
10 void dfs(int x, int f, int d) {
11     F[x] = f, D[x] = d;
12     for(int i = 0; i < G[x].size(); ++i) {
13         int to = G[x][i];
14         if(to == f) continue;
15         dfs(to, x, d + 1);
16     }
17 }
18 
19 int fa[2][maxn], r[2][maxn];
20 int Find(int o, int x) {
21     return fa[o][x] == x ? x : fa[o][x] = Find(o, fa[o][x]);
22 }
23 void Union(int o, int x, int y) {
24     int fu = Find(o, x), fv = Find(o, y);
25     if(D[fu] < D[fv]) swap(fu, fv);
26     if(fu != fv) {
27         fa[o][fu] = fv, r[o][fv] += r[o][fu];
28         if(o == 0) c[fv] += c[fu];
29     }
30 }
31 
32 int main() {
33     int T;
34     scanf("%d", &T);
35     while(T--) {
36         int n, m;
37         scanf("%d %d", &n, &m);
38         for(int i = 1; i <= n; ++i) fa[0][i] = fa[1][i] = i, r[0][i] = r[1][i] = 1, c[i] = 0, G[i].clear();
39         mp.clear();
40         for(int i = 1; i < n; ++i) {
41             int u, v, w;
42             scanf("%d %d %d", &u, &v, &w);
43             G[u].push_back(v), G[v].push_back(u);
44             if(u > v) swap(u, v);
45             mp[pii(u, v)] = w;
46         }
47         dfs(1, 0, 1);
48         for(it = mp.begin(); it != mp.end(); ++it) {
49             int u = (*it).first.first, v = (*it).first.second, w = (*it).second;
50             if(w == 1) Union(0, u, v);
51             if(w <= 2) Union(1, u, v);
52         }
53         for(it = mp.begin(); it != mp.end(); ++it) {
54             int u = (*it).first.first, v = (*it).first.second, w = (*it).second;
55             if(D[u] > D[v]) swap(u, v);
56             if(w == 3) c[Find(0, u)] += r[1][Find(1, v)];
57         }
58         while(m--) {
59             int a, b, s, t;
60             scanf("%d %d %d %d", &a, &b, &s, &t);
61             if(a > b) swap(a, b);
62             int w = mp[pii(a, b)];
63             if(w == 3) {
64                 c[Find(0, F[Find(1, a)])] -= r[1][Find(1, a)];
65                 c[Find(0, F[Find(1, b)])] -= r[1][Find(1, b)];
66                 Union(1, a, b);
67                 mp[pii(a, b)] = 2;
68                 c[Find(0, F[Find(1, b)])] += r[1][Find(1, b)];
69             }
70             if(w == 2) {
71                 Union(0, a, b);
72                 mp[pii(a, b)] = 1;
73             }
74             int ans1 = 0, ans2 = r[1][Find(1, s)] + c[Find(0, s)];
75             if(Find(1, s) == Find(1, t) || Find(1, F[Find(0, s)]) == Find(1, t) || Find(0, F[Find(1, t)]) == Find(0, s)) ans1 = 1;
76             if(mp[pii(min(F[Find(0, s)], Find(0, s)), max(F[Find(0, s)], Find(0, s)))] == 3) ans2 += r[1][Find(1, F[Find(0, s)])];
77             printf("%d %d\n", ans1, ans2);
78         }
79     }
80     return 0;
81 }
Aguin

 

Problem D. Nothing is Impossible

心灵相通

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int a[111], b[111], id[111];
 4 typedef long long LL;
 5 
 6 bool cmp(int i, int j) {
 7     return b[i] < b[j];
 8 }
 9 
10 int main() {
11     int T;
12     scanf("%d", &T);
13     while(T--) {
14         int n, m;
15         scanf("%d %d", &n, &m);
16         for(int i = 1; i <= n; ++i) scanf("%d %d", a + i, b + i), id[i] = i;
17         sort(id + 1, id + 1 + n, cmp);
18         LL t = 1, ans = 0;
19         for(int i = 1; i <= n; ++i) {
20             int x = id[i];
21             if(t * (b[x] + 1) <= m) t *= (b[x] + 1), ans++;
22         }
23         printf("%lld\n", ans);
24     }
25     return 0;
26 }
Aguin

 

Problem E. Matrix from Arrays

暴力循环节

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 LL A[11];
 5 
 6 int L, d[11] = {0, 1, 4, 3, 8, 5, 12, 7, 16, 9, 20};
 7 LL cal(LL x, LL y) {
 8     return ((x + y) * (x + y + 1) / 2 + x) % L;
 9 }
10 
11 int main() {
12     int T;
13     scanf("%d", &T);
14     while(T--) {
15         int Q;
16         scanf("%d", &L);
17         for(int i = 0; i < L; ++i) scanf("%lld", A + i);
18         scanf("%d", &Q);
19         for(int i = 0; i < Q; ++i) {
20             LL x0, y0, x1, y1;
21             scanf("%lld %lld %lld %lld", &x0, &y0, &x1, &y1);
22             LL ans = 0, tmp = 0;
23 
24             for(LL j = x0; j < x0 + d[L]; ++j)
25                 for(LL k = y0; k < y0 + d[L]; ++k)
26                     tmp += A[cal(j, k)];
27             ans += tmp * ((x1 - x0 + 1) / d[L]) * ((y1 - y0 + 1) / d[L]);
28 
29             if(y1 - y0 + 1 > d[L]) {
30                 tmp = 0;
31                 for(LL j = x0 + (x1 - x0 + 1) / d[L] * d[L]; j <= x1; ++j)
32                     for(LL k = y0; k < y0 + d[L]; ++k)
33                         tmp += A[cal(j, k)];
34                 ans += tmp * ((y1 - y0 + 1) / d[L]);
35             }
36 
37             if(x1 - x0 + 1 > d[L]) {
38                 tmp = 0;
39                 for(LL k = y0 + (y1 - y0 + 1) / d[L] * d[L]; k <= y1; ++k)
40                     for(LL j = x0; j < x0 + d[L]; ++j)
41                         tmp += A[cal(j, k)];
42                 ans += tmp * ((x1 - x0 + 1) / d[L]);
43             }
44 
45             for(LL j = x0 + (x1 - x0 + 1) / d[L] * d[L]; j <= x1; ++j)
46                 for(LL k = y0 + (y1 - y0 + 1) / d[L] * d[L]; k <= y1; ++k)
47                     ans += A[cal(j, k)];
48             printf("%lld\n", ans);
49         }
50     }
51     return 0;
52 }
Aguin

 

Problem F. Travel Through Time

可持久化平衡树不太会会阿?

 

Problem G. Depth-First Search

依然感觉没那么好做阿大家都是神仙吗?

每个子树里面要维护名次,每次还要把一个系数传递下去T^T

  1 #include <bits/stdc++.h>
  2 using namespace std;
  3 const int maxn = 1e6 + 10;
  4 typedef long long ll;
  5 const ll mod = 1e9 + 7;
  6 vector<int> G[maxn];
  7 int B[maxn], deg[maxn];
  8 ll fac[maxn], inv_fac[maxn];
  9 
 10 vector<int> c[maxn];
 11 int lowbit(int s) {
 12     return s & (-s);
 13 }
 14 void modify(int o, int x, int v) {
 15     for (int i = x; i < c[o].size(); i += lowbit(i)) c[o][i] += v;
 16 }
 17 int query(int o, int x) {
 18     int ret = 0;
 19     for (int i = x; i > 0; i -= lowbit(i)) ret += c[o][i];
 20     return ret;
 21 }
 22 
 23 ll f[maxn];
 24 vector<int> v[maxn];
 25 set<int> s[maxn];
 26 void dfs1(int x, int fa) {
 27     f[x] = 1;
 28     v[x].clear(), s[x].clear();
 29     for(int i = 0; i < G[x].size(); ++i) {
 30         int to = G[x][i];
 31         if(to == fa) continue;
 32         dfs1(to, x), f[x] = f[x] * f[to] % mod, v[x].push_back(to), s[x].insert(to);
 33     }
 34     f[x] = f[x] * fac[v[x].size()] % mod;
 35     sort(v[x].begin(), v[x].end());
 36     c[x] = vector<int> (v[x].size() + 1, 0);
 37     for(int i = 0; i < v[x].size(); ++i) modify(x, i + 1, 1);
 38 }
 39 
 40 ll fp(ll a, ll b) {
 41     ll ret = 1ll;
 42     while (b) {
 43         if (b & 1) ret = ret * a % mod;
 44         a = a * a % mod;
 45         b >>= 1;
 46     }
 47     return ret;
 48 }
 49 ll inv(ll x) {
 50     return fp(x, mod - 2);
 51 }
 52 
 53 ll ans, p;
 54 void dfs2(int x, ll o) {
 55     ++p;
 56     ll t = 1;
 57     for(int i = 0; i < v[x].size(); ++i) t = t * f[v[x][i]] % mod;
 58     while(s[x].size()) {
 59         int y = lower_bound(v[x].begin(), v[x].end(), B[p]) - v[x].begin();
 60         assert(y <= v[x].size());
 61         ans = (ans + o * t % mod * query(x, y) % mod * fac[s[x].size() - 1]) % mod;
 62         if(!p) return;
 63         if(p && s[x].find(B[p]) == s[x].end()) {p = 0; return;}
 64         else {
 65             modify(x, y + 1, -1);
 66             s[x].erase(B[p]);
 67             t = t * inv(f[B[p]]) % mod;
 68             dfs2(B[p], o * fac[s[x].size()] % mod * t % mod);
 69         }
 70     }
 71 }
 72 
 73 int main() {
 74     fac[0] = 1;
 75     for(int i = 1; i < maxn; ++i) fac[i] = fac[i - 1] * i % mod;
 76     inv_fac[0] = inv_fac[1] = 1;
 77     for(int i = 2; i < maxn; ++i) inv_fac[i] = (mod - mod / i) * inv_fac[mod % i] % mod;
 78     for(int i = 3; i < maxn; ++i) inv_fac[i] = inv_fac[i] * inv_fac[i - 1] % mod;
 79     int T;
 80     scanf("%d", &T);
 81     while(T--) {
 82         int n;
 83         scanf("%d", &n);
 84         for(int i = 1; i <= n; ++i) scanf("%d", B + i), deg[i] = 0, G[i].clear();
 85         B[n + 1] = 0;
 86         for(int i = 1; i < n; ++i) {
 87             int u, v;
 88             scanf("%d %d", &u, &v);
 89             G[u].push_back(v);
 90             G[v].push_back(u);
 91             deg[u]++, deg[v]++;
 92         }
 93         ans = 0;
 94         ll tmp = 1;
 95         for(int i = 1; i <= n; ++i) tmp = tmp * fac[deg[i] - 1] % mod;
 96         for(int i = 1; i < B[1]; ++i)
 97             ans = (ans + tmp * inv_fac[deg[i] - 1] % mod * fac[deg[i]]) % mod;
 98         dfs1(B[1], 0);
 99         p = 1, dfs2(B[1], 1);
100         printf("%lld\n", ans);
101     }
102     return 0;
103 }
Aguin

 

Problem H. Eat Cards, Have Fun

啥玩意儿阿?

 

Problem I. Delightful Formulas

咋回事阿?

 

Problem J. Let Sudoku Rotate

谈学姐写的啥玩意儿?

  1 #include<bits/stdc++.h>
  2 using namespace std;
  3 long long a[20][20],b[20][20],c[10],d[10][5],e[10];
  4 char ch;
  5 long long n,i,j,k,s,t,T,x,y,f,tot=0,q,ans;
  6 int main()
  7 {
  8         scanf("%d",&T);
  9         getchar();
 10         while (T--)
 11         {
 12                 for (i=1;i<=16;i++)
 13                 {
 14                         j=0;
 15                         ch=getchar();
 16                         while (j<16)
 17                         {
 18                                 if ((ch>='0'&&ch<='9')||(ch>='A'&&ch<='F'))
 19                                     {
 20 
 21                                         j++;
 22                                         if (ch>='1'&&ch<='9') a[i][j]=ch-48; else a[i][j]=ch-'A'+10;
 23                                         if (ch=='0') a[i][j]=16;
 24                                     }
 25                                 ch=getchar();
 26                         }
 27 
 28                 }
 29                 for (q=1;q<=16;q+=4)
 30                 {
 31                 memset(c,0,sizeof c);
 32                 while (c[0]==0)
 33                 {
 34                         for (i=1;i<=16;i++)
 35                                 for (j=1;j<=16;j++)
 36                                         b[i][j]=a[i][j];
 37                         for (i=1;i<=4;i++)
 38                         {
 39                                 for (j=1;j<=c[i];j++)
 40                                 {
 41                                         x=q;y=(i-1)*4+1;
 42                                         t=b[x][y];
 43                                         b[x][y]=b[x+3][y];
 44                                         b[x+3][y]=b[x+3][y+3];
 45                                         b[x+3][y+3]=b[x][y+3];
 46                                         b[x][y+3]=t;
 47                                         t=b[x+1][y];
 48                                         b[x+1][y]=b[x+3][y+1];
 49                                         b[x+3][y+1]=b[x+2][y+3];
 50                                         b[x+2][y+3]=b[x][y+2];
 51                                         b[x][y+2]=t;
 52                                         t=b[x][y+1];
 53                                         b[x][y+1]=b[x+2][y];
 54                                         b[x+2][y]=b[x+3][y+2];
 55                                         b[x+3][y+2]=b[x+1][y+3];
 56                                         b[x+1][y+3]=t;
 57                                         t=b[x+1][y+1];
 58                                         b[x+1][y+1]=b[x+2][y+1];
 59                                         b[x+2][y+1]=b[x+2][y+2];
 60                                         b[x+2][y+2]=b[x+1][y+2];
 61                                         b[x+1][y+2]=t;
 62                                 }
 63                         }
 64                         f=0;
 65                         for (i=q;i<=q+3;i++)
 66                         {
 67                                 s=0;t=1;
 68                                 for (j=1;j<=16;j++)
 69                                 {
 70                                         s+=b[i][j];
 71                                         t*=b[i][j];
 72                                         if (t>20922789888000) break;
 73                                 }
 74                                 if (s!=136||t!=20922789888000)
 75                                 {
 76                                         f=1;
 77                                         break;
 78                                 }
 79                         }
 80                         if (f==0)
 81                         {
 82                                 t=(q-1)/4+1;
 83                                 d[t][1]=c[1];d[t][2]=c[2];d[t][3]=c[3];d[t][4]=c[4];
 84                                 break;
 85                         }
 86                         k=4;
 87                         while (c[k]==3)
 88                         {
 89                                 c[k]=0;
 90                                 k--;
 91                         }
 92                         c[k]++;
 93                 }
 94                                 t=(q-1)/4+1;
 95                 }
 96                 ans=10000;
 97                 memset(e,0,sizeof e);
 98                 while (e[0]==0)
 99                 {
100                         for (i=1;i<=16;i++)
101                                 for (j=1;j<=16;j++)
102                                         b[i][j]=a[i][j];
103                         for (q=1;q<=4;q++)
104                         {
105                                 for (i=1;i<=4;i++)
106                                 {
107                                         c[i]=(d[q][i]+2*e[q])%4;
108                                 }
109                                 for (i=1;i<=4;i++)
110                                 {
111                                 for (j=1;j<=c[i];j++)
112                                 {
113                                         x=(q-1)*4+1;y=(i-1)*4+1;
114                                         t=b[x][y];
115                                         b[x][y]=b[x+3][y];
116                                         b[x+3][y]=b[x+3][y+3];
117                                         b[x+3][y+3]=b[x][y+3];
118                                         b[x][y+3]=t;
119                                         t=b[x+1][y];
120                                         b[x+1][y]=b[x+3][y+1];
121                                         b[x+3][y+1]=b[x+2][y+3];
122                                         b[x+2][y+3]=b[x][y+2];
123                                         b[x][y+2]=t;
124                                         t=b[x][y+1];
125                                         b[x][y+1]=b[x+2][y];
126                                         b[x+2][y]=b[x+3][y+2];
127                                         b[x+3][y+2]=b[x+1][y+3];
128                                         b[x+1][y+3]=t;
129                                         t=b[x+1][y+1];
130                                         b[x+1][y+1]=b[x+2][y+1];
131                                         b[x+2][y+1]=b[x+2][y+2];
132                                         b[x+2][y+2]=b[x+1][y+2];
133                                         b[x+1][y+2]=t;
134                                 }
135                                 }
136                         }
137                         f=0;
138                         for (i=1;i<=16;i++)
139                         {
140                                 s=0;t=1;
141                                 for (j=1;j<=16;j++)
142                                 {
143                                         s+=b[j][i];
144                                         t*=b[j][i];
145                                         if (t>20922789888000) break;
146                                 }
147                                 if (s!=136||t!=20922789888000)
148                                 {
149                                         f=1;
150                                         break;
151                                 }
152                         }
153                         if (f==0)
154                         {
155                                 s=0;
156                                 for (q=1;q<=4;q++)
157                         {
158                                 for (i=1;i<=4;i++)
159                                 {
160                                         s+=(d[q][i]+2*e[q])%4;
161                                 }
162                         }
163                                 if (s<ans) ans=s;
164                         }
165                         k=4;
166                         while (e[k]==1)
167                         {
168                                 e[k]=0;
169                                 k--;
170                         }
171                         e[k]++;
172                 }
173                 printf("%lld\n",ans);
174         }
175 }
谈学姐

 

Problem K. Expression in Memories

随便判判

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 char s[555];
 4 
 5 bool d(char c) {
 6     return c >= '0' && c <= '9';
 7 }
 8 
 9 int main() {
10     int T;
11     scanf("%d", &T);
12     while(T--) {
13         scanf("%s", s + 1);
14         int l = strlen(s + 1), ok = 1;
15         for(int i = 1; i <= l; ++i) {
16             if(s[i] == '?') s[i] = '1';
17             if(s[i] == '0' && i < l) {
18                 if(i > 1 && d(s[i - 1])) continue;
19                 if(d(s[i + 1])) ok = 0;
20                 if(s[i + 1] == '?') s[i + 1] = '+';
21             }
22             if(s[i] == '+' || s[i] == '*') {
23                 if(i == 1) ok = 0;
24                 else if(i == l) ok = 0;
25                 else if(s[i + 1] == '+' || s[i + 1] == '*') ok = 0;
26                 else if(s[i + 1] == '?') s[i + 1] = '1';
27             }
28         }
29         if(!ok) puts("IMPOSSIBLE");
30         else puts(s + 1);
31     }
32     return 0;
33 }
Aguin

 

Problem L. Graph Theory Homework

签到题

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 1e5 + 10;
 4 int w[maxn];
 5 
 6 int main() {
 7     int T;
 8     scanf("%d", &T);
 9     while(T--) {
10         int n;
11         scanf("%d", &n);
12         for(int i = 1; i <= n; ++i) scanf("%d", w + i);
13         printf("%d\n", (int) sqrt(abs(w[1] - w[n])));
14     }
15     return 0;
16 }
Aguin

 

posted @ 2018-08-06 10:29 Aguin 阅读(...) 评论(...) 编辑 收藏