关于军训的模拟赛-R2
Posted shzr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于军训的模拟赛-R2相关的知识,希望对你有一定的参考价值。
终于我也参加了一场有R1 && R2的比赛呢。
因为种种原因,老师认为上次的考试没有体现我们的真实水平,于是举办了毒瘤R2,其实也不是非常毒瘤,还是一贯的风格。
T1 : profit
概括题意:带点权的“没有上司的舞会”。然而题意有一点歧义,得看样例才能懂。
1 # include <cstdio> 2 # include <iostream> 3 4 using namespace std; 5 6 const int maxn=100009; 7 int n,firs[maxn],h,x,y,dep[maxn]; 8 int a[maxn]; 9 long long dp[maxn][2]; 10 struct edge 11 { 12 int too,nex; 13 }g[maxn<<1]; 14 15 void dfs (int x) 16 { 17 int j; 18 dp[x][0]=a[x]; 19 for (int i=firs[x];i;i=g[i].nex) 20 { 21 j=g[i].too; 22 if(dep[j]) continue; 23 dep[j]=dep[x]+1; 24 dfs(j); 25 dp[x][0]+=dp[j][1]; 26 dp[x][1]+=max(dp[j][1],dp[j][0]); 27 } 28 } 29 30 void add (int x,int y) 31 { 32 g[++h].too=y; 33 g[h].nex=firs[x]; 34 firs[x]=h; 35 } 36 37 int main() 38 { 39 freopen("profit.in","r",stdin); 40 freopen("profit.out","w",stdout); 41 42 scanf("%d",&n); 43 for (int i=1;i<=n;++i) 44 scanf("%d",&a[i]); 45 for (int i=1;i<n;++i) 46 { 47 scanf("%d%d",&x,&y); 48 add(x,y); 49 add(y,x); 50 } 51 dep[1]=1; 52 dfs(1); 53 printf("%lld",max(dp[1][0],dp[1][1])); 54 return 0; 55 }
T2 : Torch
任意给定一个正整数n(n<=100000),求一个最小的正整数m,使得n*m的十进制表示形式里只含有1和0。输入n如果有解输出m,无解则输出“No Solution”。
首先写一个暴力,然后打表找规律,现在来看一下我打了哪些表:对于1-10000的答案,1-10000的二进制分解,答案的二进制分解,乘积的二进制分解,乘积分解质因数....于是这五个表都没啥用呢...真的找不到任何规律。后来想了一个方法优化暴力,直接枚举那个乘积,因为乘积只由0,1组成,可以用二进制来枚举,这样可以少枚举很多无效的情况,但是怎么判断无解呢?并没有什么办法,但是如果..乘积..超过longlong了是不是就不大好做了...所以只枚举乘积没有爆longlong的一些情况,如果这些都不出解就干脆输出无解好了。虽然看起来非常不科学,但是竟然A了...
1 # include <cstdio> 2 # include <iostream> 3 4 using namespace std; 5 6 int n,m; 7 long long ans=0; 8 int t[100],len; 9 10 long long check (int x) 11 { 12 long long an=0; 13 len=0; 14 while (x) 15 { 16 t[++len]=x%2; 17 x/=2; 18 } 19 for (int i=len;i>=1;--i) 20 an=an*10+t[i]; 21 if(an<0) return -1; 22 if(an%n==0) return an/n; 23 return -1; 24 } 25 26 int main() 27 { 28 freopen("torch.in","r",stdin); 29 freopen("torch.out","w",stdout); 30 31 scanf("%d",&n); 32 for (int i=1;i<=1048600;++i) 33 { 34 ans=check(i); 35 if(ans!=-1) 36 { 37 cout<<ans; 38 fclose(stdin); 39 fclose(stdout); 40 return 0; 41 } 42 } 43 printf("No Solution"); 44 fclose(stdin); 45 fclose(stdout); 46 return 0; 47 }
未完待续... ...
以上是关于关于军训的模拟赛-R2的主要内容,如果未能解决你的问题,请参考以下文章