【ACM之行】◇第一站◇ 2018HDU多校赛总结
◇第一站◇ 2018HDU多校赛
十场多校赛下来,也算是给一个初中生开了眼界……看着清华一次次AK(默默立下flag),看着自己被同校的高中生完虐,一个蒟蒻只能给dalao们垫脚😥
无论如何,这十场多校赛结束了——胆战心惊、士气高涨或是低头沉思,结果无法改变,比结果更有意义的是在比赛中学会了高校赛的团队攻法,以及一些闻所未闻的算法QwQ
不得不说,前5场的比赛状态实在是太差了,可能是不习惯ACM团队赛制,与队友的配合不是很默契,再加上心态非常的紧张,就把应该做的题做错甚至是忽略了😶
垫了5次底后对多校赛的心态也就逐渐平稳了,不必与高校相争,清华的队伍不是我们能力能够触及的,我们的目光逐渐放在跟上本校高中生的步伐上。接下来的第六场比赛,在较为稳定的心态支持下,我们超过了一个高中队(虽然是本校倒数第二),得到了第257名,并与第200名通过数相同,得到了第一个分数~接着第六场的状态,我们加速做出了两道题(还是非常菜鸡,但至少尽力了),再一次得分~最后两场,比赛技巧也逐渐了解了,于是我们的发挥更加稳定,最终摆脱垫底的命运……
◇ Score Ⅰ
只得到了569名QwQ。可以说是把水题都刷了吧,也就是A,C,K题,前一个小时还好,其他高中队基本上也还是做了两道题,但是一个半小时后就逐渐掉队了,终于在接近两个小时的时候做出了C题……但发现没有改变掉队的事实,然后剩下的3个小时就自闭了😭
第一道:K题 Time Zone
其实就是一道模拟题,是队友做的,只是因为不怎么了解时区错了几次。
第二道:C题 Triangle Partition
一开始看到的时候以为很难,是一道计算几何……实际上就是一道贪心,按照横坐标排序,再按顺序连取3个点,我竟然想了这么久
第三道:A题 Maximum Multiple
一道结论题,靠打表找规律最后还是做出来了——当x是3的倍数时,答案是(x/3)^3,是4的倍数时,答案是(x/4)^3*2,其他都是-1……打表大法好啊!
比赛历程:信心满满 -> 刷掉A题(签到)-> 看其他题 -> 发现不会 -> 心态渐渐爆炸 -> 突然刷掉C题 -> 异常激动 -> 发现清华要AK了😱 -> Boom! -> 终于刷掉A题 -> 不会做了 -> 坐飞机✈
◇ Score Ⅱ
吃午饭太晚了……回来的时候队友已经做了一道博弈论的题了,于是我开始找题做。突然发现一道逆序对的题,愉快的刷掉了。然后我就做了一道题???后来整个队3个人都在搞Hack it(记忆犹新🙃),感觉非常有希望,于是就开始码代码……一直WA……最后突然找到了反例QwQ,整个人都不好了。Hack It 错10次凉凉……
第一题:D题 Game
明显博弈论。手算几个情况,就发现然而先手必胜……然后队友就不知道在坐什么飞机,并没有注意到多组数据,一行代码就交了TAT,然后又改了多组数据,发现 PE 了!!!结果是没加换行……
第二题:J题 Swaps and Inversions
不得不说隐藏得非常深,一开始根本没有看出来是逆序对(破题能力还不够啊),直到另外一个队在讨论逆序对,然后突然懂了什么。于是我就copy了一个版~😐
比赛历程:有点害怕 -> 刷掉博弈论 -> 发现掉队 -> J题通过人数很多 -> 听到其他队在讨论 -> 恍然大悟 -> copy版 -> 除了Hack It就看不懂了 -> 疯狂找规律 -> 以为对了 -> 一直WA -> 找到反例 -> 崩溃 -> over
◇ Score Ⅲ
每个人都做了一道题,感觉还好,然而其他队好像感觉更好😐结果就GG了,但是也学会了一种方法——因为我们这些蒟蒻的英语非常的弱,读题要读很久(尤其是那一大啪啦奇奇怪怪的背景),然后我们就会时刻关注排行榜,一般来说清华AC的第一道题都是水题(还是非常人性化),然后就去看那道题QwQ。但有个缺点是速度会很慢。
第一题:D题 Euler Function
不知道队友怎么找到的结论,看代码的话就只是当 x=1 时答案为5,其他时候都是 x+5。
第二题:F题 Grab The Tree
又是一道博弈论,仍然手算……就发现结论了——只有当节点值的异或值不为零时,小Q才会赢。
第三题:L题 Visual Cube
一道模拟题不知道我为什么会做这么久。把原图像分成5块,即左上角的空白、正面、顶面、侧面和右下角的空白,几个for循环搞定QwQ
比赛历程:迅速地连续A掉D,F题 -> 比较愉快 -> 终于码完L题 -> 有点激动 -> 在200名以内 -> 开始瞎码A,C题 -> WA,MLE…… -> 颓废
◇ Score Ⅳ
清华迅速的AC了L题,然后一大堆队相继也AC了,凭借经验,这应该是一道结论题。不知道哪来的直觉,我就想出了结论,然而队友直到我AC之前都不相信……然后感觉状态还不错,又做了一道构造题,最后在队友的思路下又把D题写出来了。然而结果并没有改变……还是没有分。
第一题:L题 Graph Theory Homework
不知道怎么证明,只是凭直觉找到了结论——直接从起点到终点。
第二题:K题 Expression in Memories
一道构造题……用了一个zero[]数组判断了一下前导零,再判断有没有两个符号并在一起以及开头、末尾不能为符号;碰到?的时候就尽量换成数字1,若不满足条件(比如前导零),就换成符号+。
第三题:D题 Nothing is Impossible
出题人煞费苦心啊,把这道题改来改去,改到最后就变得很水了,直接 ai=1 了QwQ,于是在原来队友的思路上改了一改就AC了——定义全部正确人数为AC,初值为m,则AC每次除以a[i],直到结束或者AC等于0,循环的次数就是答案。
比赛历程:感觉状态不错 -> 刷了D,K两道题 -> 队友开始做E题 -> D题改了过后就水了 -> 通过D题 -> 整个队开始做E题 -> WA到最后,样例都没过 -> 发现横纵坐标反了QwQ -> [考试后十几分钟AC了]
◇ Score Ⅴ
感觉这场比赛好难啊,凉得最透的一场😭,只AC了一道题,而且是队友写的,代码都看不懂……然后就一直WA。
(由于代码看不懂,直接跳过)
◇ Score Ⅵ
一开始是崩溃的,直到3个小时40分钟才AC签到,最后AC3道竟然有分!【第一次得分的时刻】
第一题:I题 Werewolf
简单的说就是一个染色的搜索……代码是队友写的,看不太懂QwQ
第二题:A题 oval-and-rectangle
莫名结论,好像就是 πa+2b ,我也不知道为什么。
第三题:L题 Pinball
从头做到尾终于AC的高中物理题,一个初中生的我自己在网上搜资料,推抛物线、加速度(我还没学)、反弹、速度拆分……最后发现太复杂,还写WA了,样例都过不了。还得请教高中dalao,原来有定理。
比赛历程:每个人都找了一道题来做 -> 不知道为什么我就是对物理题感兴趣 -> 先AC了I题 -> 另外一个队友相继AC A题 -> 发现只要做3道题就有分 -> 仿佛全队希望就在我这道题上(大多数队都做出来了L题)-> 瞎推结论 -> 过不了样例 -> 请教dalao -> 终于AC
◇ Score Ⅶ
突然发现一道原题(在AtCoder上,还做过),只是加了一个多组数据,然后恰好队友有一个优秀的代码,加上多组数据就AC了QwQ;一道队友写的矩阵快速幂,根本看不懂。感觉这场比赛我什么都没做,好颓废啊……
第一题:A题 Age of Moyu
真的是一道原题,连样例都一样,原题链接-https://arc061.contest.atcoder.jp/tasks/arc061_c?lang=en。
第二题:J题 Sequence
矩阵快速幂真的看不懂(真的抱歉)
(我也不知道怎么描述了……全程懵过去的)
◇ Score Ⅷ
只做了两道题的蒟蒻又没分了😥,发现清华迅速的AC,就把那一道模拟大水题做出来了。然后队友最后几分钟的时候终于把D题AC了。尽管如此,还是没分……
第一题:E题 Magic Square
对于每一次操作,直接模拟,先把每一种旋转的规律找到,就可以直接用了。
第二题:D题 Parentheses Matrix
队友一直在找规律,然后就是一道构造结论题,也不知道他是怎么分类讨论的,就几种情况对应不同的构造方案……
比赛历程:秒A水题 -> 非常轻松 -> 一道题都不会做 -> 队友正在钻研D题 -> 坐飞机 -> 最后几分钟终于把D题AC了
◇ Score Ⅸ
看来组合数学还是我们这个队比较擅长的,两道组合数学基本上没有什么困难。在另一个高中队的帮助下终于AC了DP题。
第一题:K题 Rikka with Badminton
通过加法原理直接统计——不符合条件的情况有:a*n;a*n+b*n;b+c*n;c*n;a*n+c*n;d+c*n;a*n+d。注意统计后将重复计算的容斥一下。
第二场:D题 Rikka with Stone-Paper-Scissors
大概是结论题——分子是 剪刀胜的场数-剪刀负的场数+石头胜的场数-石头负的场数+布胜的场数-布负的场数 ;分母是 石头、剪刀、布的总数。注意实际上是统计第二个人的胜场。
第三场:A题 Rikka with Nash Equilibrium
这道题非常的有感想,然后我写了另外一篇博客QwQ-https://www.cnblogs.com/LuckyGlass-blog/p/9507466.html
比赛历程:AC了K题 -> 懵了一会儿 -> 找了找规律 -> 从样例中发现了什么东西 -> 莫名其妙AC了 -> 钻研A题 -> 瞎乱想 -> 高中dalao指点 -> DP终于写出来了 -> 终于AC了 -> 有分了!
◇ Score X
自己做了两道题,队友做了两道题,心态还不错。
第一题:H题 Pow
没看题目描述,直接发现样例就是2^n,只是高精度,非常高兴地找来了高精度的版QwQ
第二题:G题 Cyclic
OEIS大法好啊!!队友发现一个网站:(OEIS)http://oeis.org/;然后就找到了答案的数列,得到的递推式就是: A[i]=(i-3)*A[i-1]+(i-2)*((2*A[i-2]+A[i-3]));注意时刻模MOD!
第三题:I题 Count
打表和OEIS简直是绝配!凭借队友敏锐的思维,正解直接锁定欧拉函数——发现一个结论:当i≥4时 ans[i]=phi[i]/2+add,其中add=Σphi[i/2*2]/2(1~i),前三个就直接计算……
第四题:L题 Videos
其实我们都不会费用流,在网上照搬过来的……还是要好好学习一下网络流,对于这道题也是挺有想法的,https://www.cnblogs.com/LuckyGlass-blog/p/9519886.html
比赛历程:找模板 -> 过H题 -> 在OEIS上乱找 -> 过G题 -> 打表 -> 在OEIS上乱找 -> 过I题 -> 一群人围着网络流 -> 瞎乱搞 -> 竟然AC了!
◇ 源代码
就当是一个记录……
·场次Ⅰ
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 int n,x; 6 int main() 7 { 8 scanf("%d",&n); 9 while(n--) 10 { 11 scanf("%d",&x); 12 if(x%3==0) 13 { 14 int a=x/3; 15 printf("%lld\n",1LL*a*a*a); 16 } 17 else if(x%4==0) 18 { 19 int a=x/2,b=x/4; 20 printf("%lld\n",1LL*a*b*b); 21 } 22 else 23 printf("-1\n"); 24 } 25 }
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 struct POINT{ 7 int x,y,id; 8 }pnt[3005]; 9 bool cmp(POINT A,POINT B) 10 { 11 return A.x<B.x; 12 } 13 int main() 14 { 15 int t,n; 16 scanf("%d",&t); 17 while(t--) 18 { 19 scanf("%d",&n); 20 for(int i=0;i<3*n;i++) 21 scanf("%d%d",&pnt[i].x,&pnt[i].y),pnt[i].id=i+1; 22 sort(pnt,pnt+3*n,cmp); 23 for(int i=0;i<n;i++) 24 printf("%d %d %d\n",pnt[i*3].id,pnt[i*3+1].id,pnt[i*3+2].id); 25 } 26 return 0; 27 }
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int n,x,y,len; 7 char s[15]; 8 int main() 9 { 10 scanf("%d\n",&n); 11 while(n--) 12 { 13 bool f; 14 memset(s,0,sizeof(s)); 15 scanf("%d %d %s",&x,&y,s); 16 len=strlen(s); 17 if(s[3]=='+') 18 f=1; 19 else 20 f=0; 21 if(s[5]=='.'||s[6]=='.') 22 { 23 int d=s[len-1]-'0'; 24 d*=6; 25 if(!f) 26 d=-d; 27 y+=d; 28 if(y>=60) 29 x++,y-=60; 30 else if(y<0) 31 x--,y+=60; 32 } 33 int d=0; 34 for(int i=4;i<len;i++) 35 { 36 if(s[i]=='.') 37 break; 38 d=d*10+s[i]-'0'; 39 } 40 if(!f) 41 d=-d; 42 d-=8; 43 x+=d; 44 if(x<0) 45 x+=24; 46 else if(x>=24) 47 x-=24; 48 if(x<10) 49 printf("0"); 50 printf("%d:",x); 51 if(y<10) 52 printf("0"); 53 printf("%d\n",y); 54 } 55 }
·场次Ⅱ
1 #include<cstdio> 2 #include<vector> 3 #include<climits> 4 #include<cstring> 5 #include<algorithm> 6 using namespace std; 7 int main() 8 { 9 int n; 10 while(~scanf("%d",&n)) 11 printf("Yes\n"); 12 }
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<vector> 4 using namespace std; 5 int n,num[100005],x,y; 6 long long ans; 7 void Sort(int left,int right) 8 { 9 if(left==right) return; 10 int mid=(left+right)/2,i=left,j=mid+1,len=0; 11 vector<int> snum; 12 Sort(left,mid);Sort(mid+1,right); 13 while(i<=mid && j<=right) 14 if(num[i]<=num[j]) snum.push_back(num[i++]); 15 else ans+=mid-i+1,snum.push_back(num[j++]); 16 while(i<=mid) snum.push_back(num[i++]); 17 while(j<=right) snum.push_back(num[j++]); 18 for(int i=left,j=0;i<=right;i++,j++) num[i]=snum[j]; 19 } 20 int main() 21 { 22 while(~scanf("%d%d%d",&n,&x,&y)) 23 { 24 ans=0; 25 for(int i=0;i<n;i++) scanf("%d",&num[i]); 26 Sort(0,n-1); 27 printf("%lld\n",ans*(long long)min(x,y)); 28 } 29 return 0; 30 }
·场次Ⅲ
1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 int main() 8 { 9 int T; 10 scanf("%d",&T); 11 while(T--) 12 { 13 int x; 14 scanf("%d",&x); 15 printf("%d\n",x==1?5:x+5); 16 } 17 return 0; 18 }
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 #define MAXN 100000 7 int T,n; 8 int w[MAXN+5],sum; 9 int main() 10 { 11 scanf("%d",&T); 12 while(T--) 13 { 14 scanf("%d",&n); 15 sum=0; 16 for(int i=1;i<=n;i++) 17 { 18 scanf("%d",&w[i]); 19 sum^=w[i]; 20 } 21 for(int i=1;i<n;i++) 22 { 23 int u,v; 24 scanf("%d%d",&u,&v); 25 } 26 if(sum==0)printf("D\n"); 27 else printf("Q\n"); 28 } 29 }
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<cstring> 4 char ans[100][100]; 5 int main() 6 { 7 //freopen("out.txt","w",stdout); 8 int T;scanf("%d",&T); 9 while(T--) 10 { 11 int a,b,c;scanf("%d%d%d",&a,&b,&c); 12 memset(ans,'\0',sizeof ans); 13 int R=2*b+2*c+1,C=2*b+2*a+1; 14 for(int i=0;i<2*b;i++) 15 for(int j=0;j<2*b-i;j++) 16 ans[i+1][j+1]='.', 17 ans[R-i][C-j]='.'; 18 for(int i=0;i<2*b;i++) 19 for(int j=1;j<=2*a+1;j++) 20 if(i%2) 21 ans[i+1][2*b-i+j]=j%2?'/':'.'; 22 else 23 ans[i+1][2*b-i+j]=j%2?'+':'-'; 24 for(int i=2*b+1;i<=R;i++) 25 for(int j=1;j<=2*a+1;j++) 26 if(i%2) 27 ans[i][j]=j%2? '+':'-'; 28 else 29 ans[i][j]=j%2? '|':'.'; 30 for(int i=1;i<=2*b;i++) 31 { 32 int x=C-i+1,y=i; 33 for(int j=0;j<=2*c;j++) 34 if(i%2) 35 ans[y+j][x]=j%2?'|':'+'; 36 else 37 ans[y+j][x]=j%2? '.':'/'; 38 } 39 for(int i=1;i<=R;i++) 40 { 41 for(int j=1;j<=C;j++) 42 printf("%c",ans[i][j]); 43 printf("\n"); 44 } 45 } 46 return 0; 47 }
·场次Ⅳ
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 typedef long long ll; 7 #define MAXN 100 8 #define LL long long 9 int T; 10 ll n,m; 11 LL a[MAXN+5]; 12 int main() 13 { 14 scanf("%d",&T); 15 while(T--) 16 { 17 scanf("%lld%lld",&n,&m); 18 for(int i=1;i<=n;i++) 19 { 20 ll ac; 21 scanf("%lld%lld",&ac,&a[i]); 22 } 23 sort(a+1,a+n+1); 24 int ans=0,AC=m; 25 for(int i=1;i<=n;i++) 26 { 27 AC=AC/(a[i]+1); 28 if(AC==0)break; 29 ans++; 30 } 31 printf("%d\n",ans); 32 } 33 return 0; 34 }
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 bool work() 7 { 8 bool zero[505]={}; 9 char str[505]=""; 10 scanf("%s",str); 11 int len=strlen(str); 12 if(str[0]=='+' || str[0]=='*' || str[len-1]=='+' || str[len-1]=='*') return false; 13 if(str[0]=='?') str[0]='1'; 14 if(str[len-1]=='?') str[len-1]='1'; 15 if(len==2) 16 { 17 if(str[0]=='0') return false; 18 printf("%s\n",str); 19 return true; 20 } 21 if('1'<=str[0] && str[0]<='9') zero[0]=true; 22 for(int i=1;i<len;i++) 23 { 24 if(str[i]=='?') 25 { 26 if('0'<=str[i-1] && str[i-1]<='9' && !zero[i-1]) str[i]='+'; 27 else str[i]='1',zero[i]=true; 28 } 29 if((str[i]=='*' || str[i]=='+') && (str[i-1]=='*' || str[i-1]=='+')) 30 return false; 31 if('0'<=str[i] && str[i]<='9') 32 { 33 if(str[i]!='0') zero[i]=true; 34 if(('0'<=str[i-1] && str[i-1]<='9') && !zero[i-1]) return false; 35 } 36 if(zero[i-1] && '0'<=str[i] && str[i]<='9') 37 zero[i]=true; 38 } 39 printf("%s\n",str); 40 return true; 41 } 42 int main() 43 { 44 int T;scanf("%d",&T); 45 while(T--) 46 { 47 bool res=work(); 48 if(!res) printf("IMPOSSIBLE\n"); 49 } 50 return 0; 51 }
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 using namespace std; 7 const int MAXN=int(1e5); 8 int dis[MAXN+5]; 9 int main() 10 { 11 int T;scanf("%d",&T); 12 while(T--) 13 { 14 int n;scanf("%d",&n); 15 for(int i=0;i<n;i++) 16 scanf("%d",&dis[i]); 17 printf("%d\n",int(sqrt(fabs(dis[n-1]-dis[0])))); 18 } 19 return 0; 20 }
·场次Ⅴ
1 /*Lucky_Glass*/ 2 #include<iostream> 3 #include<string> 4 #include<algorithm> 5 using namespace std; 6 int n,m,len; 7 string s,s1,s2,a1,a2; 8 void dfs1(string s1,int x,int v) 9 { 10 if(x>=len) 11 { 12 a1=min(a1,s1); 13 return; 14 } 15 for(int i=0;i<x;i++) 16 { 17 if(s1[i]>a1[i]) 18 return; 19 else if(s1[i]<a1[i]) 20 break; 21 } 22 for(int j=x+1;j<len;j++) 23 { 24 if(v<m&&(s1[j]!='0'||x!=0)) 25 { 26 swap(s1[x],s1[j]); 27 dfs1(s1,x+1,v+1); 28 swap(s1[j],s1[x]); 29 } 30 } 31 dfs1(s1,x+1,v); 32 } 33 void dfs2(string s2,int x,int v) 34 { 35 if(x>=len) 36 { 37 a2=max(a2,s2); 38 return; 39 } 40 for(int i=0;i<x;i++) 41 { 42 if(s2[i]<a2[i]) 43 return; 44 else if(s2[i]>a2[i]) 45 break; 46 } 47 for(int j=x+1;j<len;j++) 48 { 49 if(v<m&&(s2[j]!='0'||x!=0)) 50 { 51 swap(s2[x],s2[j]); 52 dfs2(s2,x+1,v+1); 53 swap(s2[j],s2[x]); 54 } 55 } 56 dfs2(s2,x+1,v); 57 } 58 int main() 59 { 60 int T; 61 cin>>T; 62 while(T--) 63 { 64 cin>>s>>m; 65 len=s.length(); 66 s1=s2=a1=a2=s; 67 dfs1(s1,0,0); 68 dfs2(s2,0,0); 69 cout<<a1<<" "<<a2<<endl; 70 } 71 }
·场次Ⅵ
1 /*Lucky_Glass*/ 2 #include<iostream> 3 #include<cstdio> 4 #include<algorithm> 5 #include<cmath> 6 #include<cstring> 7 using namespace std; 8 int T; 9 double a,b,ans; 10 int main() 11 { 12 scanf("%d",&T); 13 while(T--) 14 { 15 scanf("%lf%lf",&a,&b); 16 a*=10000,b*=10000; 17 ans=3.1415926535897932384626433832795028841971*a+2.0*b; 18 printf("%.6lf\n",ans/10000-0.0000005); 19 } 20 }
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<cstring> 4 #include<queue> 5 #include<algorithm> 6 using namespace std; 7 #define N 100005 8 int n,m,ans,a1[N],f2[N]; 9 bool f3[N]; 10 struct mzls 11 { 12 int to; 13 bool f; 14 }g[N]; 15 int main() 16 { 17 int T; 18 scanf("%d",&T); 19 while(T--) 20 { 21 memset(a1,0,sizeof(a1)); 22 scanf("%d",&n); 23 ans=n; 24 for(int i=1;i<=n;i++) 25 { 26 char s[15]; 27 scanf("%d%s",&m,s); 28 g[i].to=m; 29 if(s[0]=='v') 30 g[i].f=0; 31 else 32 g[i].f=1; 33 } 34 for(int i=1;i<=n;i++) 35 if(!a1[i]) 36 { 37 bool ff=0; 38 //memset(f3,0,sizeof(f3)); 39 int tot=1,x=i; 40 f2[tot]=x; 41 f3[x]=1; 42 while(1) 43 { 44 bool fl=g[x].f; 45 x=g[x].to; 46 if((fl&&f3[x])||(!fl&&a1[x]==2)) 47 { 48 int x1=x; 49 bool fff=0; 50 if(!fl) 51 fff=1; 52 for(int j=tot;j>=1;j--) 53 { 54 if(f2[j]==x1) 55 fff=1; 56 if(fff) 57 a1[f2[j]]=2; 58 f3[f2[j]]=0; 59 } 60 ff=1; 61 break; 62 } 63 if((!fl&&f3[x])||(fl&&!f3[x])) 64 break; 65 f3[x]=1; 66 f2[++tot]=x; 67 } 68 if(!ff) 69 { 70 for(int j=1;j<=tot;j++) 71 { 72 f3[f2[j]]=0; 73 a1[f2[j]]=1; 74 } 75 } 76 } 77 for(int i=1;i<=n;i++) 78 ans-=a1[i]==1; 79 printf("0 %d\n",ans); 80 } 81 }
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 using namespace std; 7 const double g=9.8,EPS=1e-10; 8 int main() 9 { 10 int T;scanf("%d",&T); 11 while(T--) 12 { 13 double a,b,x,y; 14 scanf("%lf%lf%lf%lf",&a,&b,&x,&y); 15 double tana=b/a; 16 double reala=atan(tana); 17 double cosa=cos(reala),sina=sin(reala); 18 a*=-1; 19 double hgt=y-b/a*x; 20 double now=0,vx,vy=sqrt(2*hgt*g),_1=sina*g,_2=cosa*g; 21 vx=vy*sina;vy*=cosa; 22 int ans=0; 23 while(x+cosa*now<0) 24 { 25 ans++; 26 double ta,tb,fx,tot; 27 ta=vy/_2; 28 fx=vy*ta-_2/2*ta*ta; 29 tb=sqrt(2.0*fx/_2); 30 tot=ta+tb; 31 now+=vx*tot+_1/2*tot*tot; 32 vx+=_1*tot; 33 vy=_2*tb; 34 } 35 printf("%d\n",ans); 36 } 37 return 0; 38 }
·场次Ⅶ
1 /*Lucky_Glass*/ 2 #include<iostream> 3 #include<cstdio> 4 #include<cstring> 5 #include<climits> 6 #include<algorithm> 7 #include<cmath> 8 #include<queue> 9 #include<map> 10 #include<set> 11 using namespace std; 12 #define MAXN 100000 13 #define MAXM 200000 14 #define INF INT_MAX 15 int n,m; 16 struct node 17 { 18 int next,to,w; 19 }e[MAXM*2+5]; 20 int b[MAXN+5]; 21 int x,y,z,cnt,s,t,ans; 22 map<int,int> Ncolor[MAXN+5]; 23 int dist[MAXN+5]; 24 priority_queue < pair<int,int> > Q; 25 void fpush(int u,int v,long long w) 26 { 27 e[++cnt].next=b[u]; 28 e[cnt].w=w; 29 e[cnt].to=v; 30 b[u]=cnt; 31 } 32 void Dijkstra() 33 { 34 Q.push({0,s}); 35 dist[s]=1; 36 while(!Q.empty()) 37 { 38 int now=Q.top().second,xval=-Q.top().first; 39 Q.pop(); 40 for(int i=b[now];i;i=e[i].next) 41 { 42 int xnext=e[i].to,color=e[i].w; 43 int val=xval; 44 if(!Ncolor[now].count(color))val++; 45 if(dist[xnext]>val) 46 { 47 Ncolor[xnext].clear(); 48 Ncolor[xnext][color]=1; 49 dist[xnext]=val; 50 Q.push({-val,xnext}); 51 } 52 if(dist[xnext]==val)Ncolor[xnext][color]=1; 53 } 54 } 55 } 56 int main() 57 { 58 while(~scanf("%d%d",&n,&m)) 59 { 60 cnt=0; 61 for(int i=1;i<=n;i++) 62 {dist[i]=INF;Ncolor[i].clear();b[i]=0;} 63 s=1,t=n; 64 for(int i=1;i<=m;i++) 65 { 66 scanf("%d%d%d",&x,&y,&z); 67 fpush(x,y,z); 68 fpush(y,x,z); 69 } 70 Dijkstra(); 71 if(dist[n]!=INF)printf("%d\n",dist[n]); 72 else printf("-1\n"); 73 } 74 }
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 #define mod 1000000007 7 struct mzls 8 { 9 int a,b,g[4][4]; 10 }a1,b1,c1,d1; 11 inline mzls X(mzls x1,mzls x2) 12 { 13 d1.a=x1.a,d1.b=x2.b; 14 memset(d1.g,0,sizeof(d1.g)); 15 for(int i=1;i<=x1.a;i++) 16 for(int j=1;j<=x2.b;j++) 17 for(int k=1;k<=x2.a;k++) 18 d1.g[i][j]=int((1ll*d1.g[i][j]+1ll*x1.g[i][k]*x2.g[k][j])%mod); 19 return d1; 20 } 21 inline mzls Pow(int n1) 22 { 23 c1.a=c1.b=3; 24 memset(c1.g,0,sizeof(c1.g)); 25 for(int i=1;i<=3;i++) 26 c1.g[i][i]=1; 27 while(n1) 28 { 29 if(n1&1) 30 c1=X(c1,b1); 31 b1=X(b1,b1); 32 n1>>=1; 33 } 34 return c1; 35 } 36 int n,A,B,C,D,P; 37 int main() 38 { 39 int T; 40 scanf("%d",&T); 41 while(T--) 42 { 43 scanf("%d%d%d%d%d%d",&A,&B,&C,&D,&P,&n); 44 if(n<=2) 45 { 46 printf("%d\n",n==1?A:B); 47 continue; 48 } 49 memset(a1.g,0,sizeof(a1.g)); 50 a1.a=3,a1.b=1; 51 a1.g[1][1]=B,a1.g[2][1]=A,a1.g[3][1]=1; 52 int v; 53 for(int i=3;i<=n;i=v+1) 54 { 55 if(i>P) 56 v=n; 57 else 58 v=min(n,P/(P/i)); 59 b1.a=3,b1.b=3; 60 b1.g[1][1]=D,b1.g[2][1]=1,b1.g[3][1]=0; 61 b1.g[1][2]=C,b1.g[2][2]=0,b1.g[3][2]=0; 62 b1.g[1][3]=P/i,b1.g[2][3]=0,b1.g[3][3]=1; 63 b1=Pow(v-i+1); 64 a1=X(b1,a1); 65 } 66 printf("%d\n",a1.g[1][1]%mod); 67 } 68 }
·场次Ⅷ
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int n,m; 7 bool g[205][205]; 8 int main() 9 { 10 int T; 11 scanf("%d",&T); 12 while(T--) 13 { 14 memset(g,0,sizeof(g)); 15 char s[2]={'(',')'}; 16 bool f=0; 17 scanf("%d%d",&n,&m); 18 if((n%2==1)||(m%2==1)) 19 { 20 f=n%2; 21 if(!f) 22 { 23 for(int i=0;i<n;i++) 24 { 25 for(int j=0;j<m;j++) 26 printf("%c",s[i%2]); 27 printf("\n"); 28 } 29 } 30 else 31 { 32 for(int i=0;i<n;i++) 33 { 34 for(int j=0;j<m;j++) 35 printf("%c",s[j%2]); 36 printf("\n"); 37 } 38 } 39 } 40 else 41 { 42 if(n<m) 43 { 44 f=1; 45 swap(n,m); 46 } 47 for(int i=1;i<=n;i+=2) 48 for(int j=1;j<=m;j++) 49 g[i][j]=(1+j)%2; 50 for(int i=2;i<=n;i+=2) 51 { 52 g[i][1]=0; 53 for(int j=2;j<m;j++) 54 g[i][j]=(j%2); 55 g[i][m]=1; 56 } 57 if(n+m-4>n+m/2-1) 58 { 59 for(int i=1;i<=m;i++) 60 g[1][i]=0; 61 for(int i=1;i<=m;i++) 62 g[n][i]=1; 63 } 64 if(!f) 65 { 66 for(int i=1;i<=n;i++) 67 { 68 for(int j=1;j<=m;j++) 69 printf("%c",s[g[i][j]]); 70 printf("\n"); 71 } 72 } 73 else 74 { 75 for(int i=1;i<=m;i++) 76 { 77 for(int j=1;j<=n;j++) 78 printf("%c",s[g[j][i]]); 79 printf("\n"); 80 } 81 } 82 } 83 } 84 }
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int n,squ[5][5],fsqu[5][5]; 7 int main(){ 8 int T;scanf("%d",&T); 9 while(T--) 10 { 11 scanf("%d",&n); 12 for(int i=1;i<=3;i++) 13 { 14 char str[5]="";scanf("%s",str+1); 15 for(int j=1;j<=3;j++) 16 squ[i][j]=str[j]-'0'; 17 } 18 for(int i=0;i<n;i++) 19 { 20 int x;char s[2]="";scanf("%d%s",&x,s); 21 int a,b; 22 switch(x) 23 { 24 case 1: a=b=1;break; 25 case 2: a=1;b=2;break; 26 case 3: a=2;b=1;break; 27 case 4: a=b=2;break; 28 } 29 memcpy(fsqu,squ,sizeof squ); 30 if(s[0]=='C') 31 squ[a][b]=fsqu[a+1][b], 32 squ[a+1][b]=fsqu[a+1][b+1], 33 squ[a][b+1]=fsqu[a][b], 34 squ[a+1][b+1]=fsqu[a][b+1]; 35 else 36 squ[a][b]=fsqu[a][b+1], 37 squ[a][b+1]=fsqu[a+1][b+1], 38 squ[a+1][b]=fsqu[a][b], 39 squ[a+1][b+1]=fsqu[a+1][b]; 40 } 41 for(int i=1;i<=3;i++) 42 { 43 for(int j=1;j<=3;j++) 44 printf("%d",squ[i][j]); 45 printf("\n"); 46 } 47 } 48 return 0; 49 }
·场次Ⅸ
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int r,c; 7 long long mod; 8 long long dp[85][85][6405]; 9 int main(){ 10 int T;scanf("%d",&T); 11 while(T--) 12 { 13 scanf("%d%d%lld",&r,&c,&mod); 14 memset(dp,0,sizeof dp); 15 dp[1][1][1]=1ll; 16 for(int i=1;i<=r;i++) 17 for(int j=(i==1? 2:1);j<=c;j++) 18 for(int k=1;k<=i*j;k++) 19 { 20 int A=0,B=0,C=0; 21 A=dp[i-1][j][k-1]*j*(r-i+1)%mod; 22 B=dp[i][j-1][k-1]*i*(c-j+1)%mod; 23 if(i*j-k+1>=0) C=dp[i][j][k-1]*(i*j-k+1)%mod; 24 dp[i][j][k]=((A+B)%mod+C)%mod; 25 } 26 printf("%lld\n",dp[r][c][r*c]*r%mod*c%mod); 27 } 28 return 0; 29 }
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 typedef long long ll; 6 ll a1,b1,c1,a2,b2,c2; 7 bool f; 8 ll n,m; 9 ll gcd(ll x,ll y) 10 { 11 return y==0?x:gcd(y,x%y); 12 } 13 int main() 14 { 15 int T; 16 scanf("%d",&T); 17 while(T--) 18 { 19 f=0; 20 scanf("%lld%lld%lld%lld%lld%lld",&a1,&b1,&c1,&a2,&b2,&c2); 21 n=a2*(c1-b1)+b2*(a1-c1)+c2*(b1-a1); 22 m=a2+b2+c2; 23 if(m<0) 24 m=-m,n=-n; 25 if(n<0) 26 n=-n,f=1; 27 ll x1=gcd(n,m); 28 n/=x1,m/=x1; 29 if(f) 30 n=-n; 31 printf("%lld",n); 32 if(m!=1) 33 printf("/%lld",m); 34 printf("\n"); 35 } 36 }
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<algorithm> 4 #define mod 998244353 5 using namespace std; 6 typedef long long ll; 7 ll Pow(ll a,ll b) 8 { 9 ll ans=1,base=a; 10 while(b!=0) 11 { 12 if(b&1!=0) 13 ans=(ans*base)%mod; 14 base=(base*base)%mod; 15 b/=2; 16 } 17 return ans%mod; 18 } 19 ll a,b,c,d; 20 int main() 21 { 22 int T; 23 scanf("%d",&T); 24 while(T--) 25 { 26 scanf("%lld%lld%lld%lld",&a,&b,&c,&d); 27 printf("%lld\n",((b+1)*Pow(2ll,a+c)%mod+d*Pow(2ll,a+c)%mod+((Pow(2ll,b)-b-1)*Pow(2ll,a)%mod)+mod)%mod); 28 } 29 }
·场次Ⅹ
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 const long long MOD=998244353; 7 long long A[100005]={1,0,0}; 8 int main(){ 9 for(int i=3;i<=100000;i++) 10 A[i]=(i-3)*A[i-1]%MOD+(i-2)*((2*A[i-2]%MOD+A[i-3])%MOD)%MOD, 11 A[i]%=MOD; 12 int T,x;scanf("%d",&T); 13 while(T--) 14 scanf("%d",&x), 15 printf("%lld\n",A[x]); 16 return 0; 17 }
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<cstring> 4 int a[1000005]; 5 using namespace std; 6 int main() 7 { 8 int x,n,T; 9 scanf("%d",&T); 10 while(T--) 11 { 12 scanf("%d",&n); 13 memset(a,0,sizeof(a)); 14 int len=1; 15 a[1]=1; 16 for(int i=1;i<=n;i++) 17 { 18 x=0; 19 for(int j=1;j<=len;j++) 20 { 21 a[j]=a[j]*2+x; 22 x=a[j]/10; 23 a[j]%=10; 24 if(x!=0&&j==len) 25 len++; 26 } 27 } 28 for(int i=len;i>=1;i--) 29 printf("%d",a[i]); 30 printf("\n"); 31 } 32 return 0; 33 }
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #define N int(2e7) 6 using namespace std; 7 int phi[N+10]; 8 long long sum[N+10]; 9 int prime[N+10],tot,ans; 10 bool mark[N+10]; 11 long long Ans[N+5]; 12 void getphi() 13 { 14 int i,j; 15 phi[1]=1; 16 for(i=2;i<=N;i++) 17 { 18 if(!mark[i]) 19 { 20 prime[++tot]=i; 21 phi[i]=i-1; 22 } 23 for(j=1;j<=tot;j++) 24 { 25 if(i*prime[j]>N) break; 26 mark[i*prime[j]]=1; 27 if(i%prime[j]==0) 28 { 29 phi[i*prime[j]]=phi[i]*prime[j];break; 30 } 31 else phi[i*prime[j]]=phi[i]*(prime[j]-1); 32 } 33 } 34 } 35 int main(){ 36 Ans[1]=0;Ans[2]=1;Ans[3]=2; 37 getphi(); 38 long long add=0; 39 for(int i=1;i<=N;i++) 40 { 41 sum[i]=sum[i-1]+phi[i]; 42 if(i>=4) 43 { 44 if(i%2==0) add+=phi[i]/2; 45 Ans[i]=sum[i]/2+add; 46 } 47 } 48 int T;scanf("%d",&T); 49 while(T--){ 50 int x;scanf("%d",&x); 51 printf("%lld\n",Ans[x]); 52 } 53 return 0; 54 }
1 /*Lucky_Glass*/ 2 #include<cstdio> 3 #include<cstring> 4 #include<queue> 5 #include<iostream> 6 #include<algorithm> 7 using namespace std; 8 const int N = 50002; 9 const int M = 500005; 10 #define INF 0x3f3f3f3f 11 struct E 12 { 13 int to,cap,cost,flow,next; 14 }e[2*M];int head[N] , ecnt; 15 int pre[N]; 16 int dis[N]; 17 bool vis[N]; 18 int n,m,S,T; 19 20 void Clear() 21 { 22 ecnt = 0; 23 memset(head,-1,sizeof head); 24 } 25 26 void adde(int fr,int to,int cap,int cost) 27 { 28 e[ecnt]=(E){to,cap,-cost,0,head[fr]}; 29 head[fr] = ecnt++; 30 e[ecnt]=(E){fr,0,cost,0,head[to]}; 31 head[to] = ecnt++; 32 } 33 34 bool SPFA(int s,int t) 35 { 36 memset(vis,0,sizeof vis); 37 memset(dis,0x3f,sizeof dis); 38 memset(pre,-1,sizeof pre); 39 queue <int> q; 40 q.push(s);dis[s] = 0;vis[s]=1; 41 42 while (!q.empty()) 43 { 44 int cur = q.front();q.pop();vis[cur] = false; 45 for (int j=head[cur];j!=-1;j=e[j].next) 46 { 47 int to = e[j].to; 48 if (dis[to] > dis[cur] + e[j].cost && e[j].cap > e[j].flow ) 49 { 50 dis[to] = dis[cur] + e[j].cost; 51 pre[to] = j; 52 if (!vis[to]) 53 { 54 q.push(to); 55 vis[to] = true; 56 } 57 } 58 } 59 } 60 return pre[t] != -1; 61 } 62 63 void MCMF (int s,int t,int &maxflow,int &mincost) 64 { 65 maxflow = mincost = 0; 66 while (SPFA(s,t)) 67 { 68 int MIN = INF; 69 for (int j=pre[t]; j!=-1;j=pre[e[j^1].to]) 70 { 71 MIN = min(MIN,e[j].cap - e[j].flow); 72 } 73 for (int j=pre[t]; j!=-1;j=pre[e[j^1].to]) 74 { 75 e[j].flow += MIN; 76 e[j^1].flow -= MIN; 77 mincost += MIN * e[j].cost; 78 } 79 maxflow += MIN; 80 } 81 } 82 83 #define MAXN 3000 84 85 int L[MAXN+5],R[MAXN+5],Lk[MAXN+5],Kd[MAXN+5]; 86 int main(){ 87 int TT; 88 cin>>TT; 89 while(TT--){ 90 Clear(); 91 int nn,mm,kk,ht; 92 cin>>nn>>mm>>kk>>ht; 93 for(int i=1;i<=mm;i++) 94 cin>>L[i]>>R[i]>>Lk[i]>>Kd[i]; 95 S=1,T=kk+mm*2+2; 96 for(int i=1;i<=kk;i++) 97 adde(S,i+1,1,0); 98 for(int i=1;i<=kk;i++) 99 for(int j=1;j<=mm;j++) 100 adde(i+1,j+kk+1,1,Lk[j]); 101 for(int i=1;i<=mm;i++) 102 adde(i+kk+1,i+kk+mm+1,1,0); 103 for(int i=1;i<=mm;i++) 104 adde(i+kk+mm+1,T,1,0); 105 for(int i=1;i<=mm;i++) 106 for(int j=1;j<=mm;j++) 107 if(i!=j&&R[i]<=L[j]){ 108 if(Kd[i]!=Kd[j]) 109 adde(i+kk+mm+1,j+kk+1,1,Lk[j]); 110 else 111 adde(i+kk+mm+1,j+kk+1,1,Lk[j]-ht); 112 } 113 int ans1,ans2; 114 MCMF(S,T,ans1,ans2); 115 cout<<-ans2<<"\n"; 116 } 117 }
◇ 前行
2018的多校赛结束了,但学习编程的步伐尚未停止。尚且初三,路还很长,在 AFO 之前至少要做出一些,才对得起5年的学习。NOIP也不早了,多校赛,来年再见吧……
The End
Thanks for reading!
- Lucky_Glass