

题意:给定X,Y两个砝码的质量,你可以选择一个砝码将其拆成质量为A、B的两个砝码,最终将得到三个砝码,你的任务就是,如何拆分会使得天平能够测得的不同质量数最多
例子:X:4 Y:9
我们可以将X拆分为 1和 3,这样就可以测得的最大质量数为,1,2,3,4,5,6,7,8,9,10,11,12,13。
分析:要想知道如何拆分才会使得质量数最大,那么我们可以通过枚举每一次分法,最终取得max
代码:
- #include
- #define int long long
- const int N=2e5+10;
- using namespace std;
- int a[N],s[N],sum[N];
-
- inline void solve(){
- int x,y;cin>>x>>y;
- int ans=0;
- set<int>se;se.clear();
- //拆砝码x
- for(int i=1;i<=x;i++){
- int a=i,b=x-i,c=y;
- se.insert(a);se.insert(b);se.insert(c);
- se.insert(a+b);se.insert(a+c);se.insert(b+c);se.insert(a+b+c);
- if(a!=b) se.insert(abs(a-b));
- if(a!=c) se.insert(abs(a-c));
- if(b!=c) se.insert(abs(b-c));
- if(a+b!=c) se.insert(abs(a+b-c));
- if(a+c!=b) se.insert(abs(a+c-b));
- if(b+c!=a) se.insert(abs(b+c-a));
- if(se.size()>ans) ans=se.size();
- se.clear();
- }
-
- //拆砝码y
- for(int i=1;i<=y;i++){
- int a=i,b=y-i,c=x;
- se.insert(a);se.insert(b);se.insert(c);
- se.insert(a+b);se.insert(a+c);se.insert(b+c);se.insert(a+b+c);
- if(a!=b) se.insert(abs(a-b));
- if(a!=c) se.insert(abs(a-c));
- if(b!=c) se.insert(abs(b-c));
- if(a+b!=c) se.insert(abs(a+b-c));
- if(a+c!=b) se.insert(abs(a+c-b));
- if(b+c!=a) se.insert(abs(b+c-a));
- if(se.size()>ans) ans=se.size();
- se.clear();
- }
- cout<
"\n"; - }
-
- signed main(){
- ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
- int T;cin>>T;
- while(T--) solve();
- }



题意:数一下有多少种线路,并处以公交车的数量。
分析:依次标记每条路线,记录不同的路线条数,最后除以公交车的数量
代码:
- #include
- #define int long long
- const int N=550;
- using namespace std;
- int x[N],y[N],vis[N][N];//vis记录从x——>y是否走过
-
- inline void solve(){
- int bus,m;cin>>bus>>m;
- memset(vis,0,sizeof vis);
- int res=0;
- for(int i=1;i<=m;i++) cin>>x[i];
- for(int i=1;i<=m;i++) cin>>y[i];
-
- for(int i=1;i<=m;i++){
- if(vis[x[i]][y[i]]==0){
- vis[x[i]][y[i]]=1;
- vis[y[i]][x[i]]=1;
- res++;
- }
- }
- cout<
setprecision(3)<<(1.0*res/bus)< - }
-
- signed main(){
- ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
- int T;cin>>T;
- while(T--) solve();
- }
F:暴力模拟

题意:一个村长有N个人,M对朋友关系,当i和j的共同朋友数量大于或等于K时,双方可以变成朋友。求一段时间后有多少对新的朋友对关系建立起来。
分析:一开始是以为并查集,然后发现是陷阱。然后别人说可以用图做,用Prim可以求解。这里选择的是暴力模拟。因为数据只有100,O(N^3)并不会超时。
这题的关键:
1:如何判断两人的共同朋友数量
2:如何进行关系合并
3:合并后,如何再判朋友关系的数量
具体看代码:
- #include
- using namespace std;
- int f[150][150];
-
- inline void solve(){
- int n,m,k;cin>>n>>m>>k;
- memset(f,0,sizeof(f));
- for(int i=0;i
//处理朋友关系 - int x,y;cin>>x>>y;
- f[x][y]=f[y][x]=1;
- }
- int s1=0,s2=0,s3=0;
- while(1){
- s1=0;
- for(int i=0;i
//枚举所有人的关系情况 - for(int j=i+1;j
- if(f[i][j]==0){//如果i跟j不是朋友
- s2=0;
- for(int t=0;t
//枚举i和j共同朋友 - if(f[i][t]&&f[j][t]) s2++;//记录共同朋友个数
- }
- if(s2>=k){//满足条件
- s1++;//s1是保证循环结束:即不会再有新朋友结交
- s3++;//新结交朋友的个数
- f[i][j]=f[j][i]=1;//i和j成为朋友
- }
- }
- }
- }
- if(s1==0) break;
- }
- cout<
"\n"; - }
-
- int main(){
- ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
- int T;cin>>T;
- while(T--) solve();
- }
H:贪心


题意:一个音游,分数由point * (combo*2+1)计算,假设玩家很强,combo是一直连续的。求最低分和最高分。point分成50,100,300三种。(注意:combo是从0开始的)
输入:每个point分对应点了几次 输出:min,max
分析:要想使分数最低,肯定是先point分从大到小开始点,分数最高则反之
代码:
- #include
- #define int long long
- using namespace std;
-
- inline void solve(){
- int a,b,c;cin>>a>>b>>c;
- int d=a+b+c;int aa=a,bb=b,cc=c;
- int minn=0,maxx=0;
- for(int i=0;i
- if(aa) minn+=300*(i*2+1),aa--;
- else if(bb) minn+=100*(i*2+1),bb--;
- else minn+=50*(i*2+1),cc--;
- }
- for(int i=0;i
- if(c) maxx+=50*(i*2+1),c--;
- else if(b) maxx+=100*(i*2+1),b--;
- else maxx+=300*(i*2+1),a--;
- }
- cout<
" "<"\n"; - }
-
- signed main(){
- int t;cin>>t;
- while(t--) solve();
- }
J:暴力枚举

题意:给定N个小朋友围成一圈,每个小朋友手上都有对应的玩具数量,老师将抽取M个小朋友手里所有的玩具,问能够抽取的最大数。
分析:直接暴力枚举答案即可
代码:
- #include
- #define int long long
- using namespace std;
- const int N=2e5+10;
- int a[N];
-
- inline void solve(){
- int n,m;cin>>n>>m;
- for(int i=0;i
>a[i]; - int cnt=0,ans=0,res=0;
- for(int i=0;i
- cnt=0,ans=0;
- for(int j=i%n;;j++){
- j%=n;
- ans+=a[j];cnt++;
- if(cnt==m) break;
- }
- res=max(res,ans);
- }
- cout<
"\n"; - }
-
- signed main(){
- int t;cin>>t;
- while(t--) solve();
- }
-
相关阅读:
手撕JavaScript面试题
中山大学软件工程学院区块链课程作业——信息传递网络与价值传递网络的区别和联系是什么?未来价值传递网络上可能产生的新业务有哪些?
【校招VIP】产品行测之逻辑计算题
C语言——结构体详解
E. Nastya and Potions
jQuery-DOM操作
正版软件 | R-Drive Image:数据安全守护者,您的智能备份专家
Python数据分析实战-使用装饰器为函数增加异常处理功能(附源码和实现效果)
CSS 单位解析
北邮22级信通院数电:Verilog-FPGA(9)第九周实验(4)实现寄存器74LS374
-
原文地址:https://blog.csdn.net/YuDuna/article/details/127720675