• 11.6


    1642. 与计算
    ☆   输入文件:and.in   输出文件:and.out   简单对比
    时间限制:1 s   内存限制:64 MB
    【题目描述】
    给你一个长度为n的序列A,请你求出一对Ai,Aj(1<=i<j<=n)使Ai“与”Aj最大。
    说明:“与”表示二进制位运算and,在c++中表示为 & 。
    例如:(1000)2 & (1010)2=(1000)2
    【输入格式】
    第一行为n。接下来n行,一行一个数字表示Ai。
    【输出格式】
    输出最大的Ai“与”Aj的结果。
    【样例输入】
    3
    8
    10
    2
    【样例输出】
    8
    【提示】
    样例解释:
    (8 & 10 )= 8
    (8 & 2) = 0
    (10 & 2 )= 2
    数据范围:
    20%的数据保证n<=5000
    100%的数据保证 n<=3*10^5,0<=Ai<=10^9
    【来源】
    在此键入。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 #define maxn 300005
     6 using namespace std;
     7 void Emine(){
     8     freopen("and.in","r",stdin);
     9     freopen("and.out","w",stdout);
    10 }
    11 int read(){
    12     int x=0,f=1;char ch=getchar();
    13     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    14     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    15     return x*f;
    16 }
    17 int n,ans,b[maxn],vis[maxn];
    18 int main(){
    19     Emine();
    20     n=read();ans=0;
    21     for(int i=1;i<=n;i++)b[i]=read(),vis[i]=1;
    22     for(int j=30;j>=0;j--){
    23         int cnt=0;
    24         for(int i=1;i<=n;i++){
    25             if((b[i]&(1<<j))&&vis[i])cnt++;
    26             if(cnt==2){ans+=(1<<j);break;}
    27         }
    28         if(cnt==2){
    29             for(int i=1;i<=n;i++)if((b[i]&(1<<j))==0)vis[i]=0;
    30         }
    31     }
    32     printf("%d
    ",ans);
    33     return 0;
    34 }
    View Code

    1643. 宠物之战
    ★   输入文件:senso.in   输出文件:senso.out   简单对比
    时间限制:1 s   内存限制:256 MB
    【题目描述】
    众所周知,moreD的宠物已经被moreD奴役得体无完肤。这只宠物实在忍无可忍,把自己每天走魔法树的经历告诉了自己的宠物。同时他还说明了自己爬树是多么地慢,以至于moreD每天都残酷地训练他爬树。
    幸运的是moreD的宠物的宠物不是moreD的宠物,moreD的宠物深知”宠物是用来宠的而不是用来奴役的”这一点,所以moreD的宠物对待自己的宠物很有爱。所以moreD的宠物与其宠物商量着要推翻moreD的暴政,方法是把moreD告上法庭,就以自己每天被迫爬树来做证据。
    由于魔法树是树,训练树当然也是树啦。
    moreD的训练有着GX的文化,每天moreD会把自己的宠物通灵到树的一个端点上,这个通灵点可能与之前的通灵点相同。然后moreD命令他的宠物从这个点开始走,让这只宠物随便访问自己该天之前没有访问过的节点,一直走到该天无路可走,训练才会结束,宠物才可以休息。
    moreD的宠物每天都会在这棵树上训练,幸运的是他每天走过的训练路径都不同,直到若干天后,所有可能的训练路径都被走遍了。
    你,作为moreD宠物的宠物,一只被moreD的宠物宠着的宠物,当然想帮moreD的宠物算出他总共走过的路径长度啦。
    【输入格式】
    第一行包含两个正整数N,M,表示树的点数与边数。
    接下来M行,每行三个正整数表示Li,bi,ci分别表示树上有一条长度为Li的连接bi,ci两个结点的边。
    【输出格式】
    仅一行表示答案
    【样例输入】
    5 4
    1 2 1
    1 3 1
    2 4 2
    2 5 2
    【样例输出】
    37
    【提示】
    可能的训练路径有(1-2-4),(1-2-5),(1-3),(2-4),(2-5),(2-1-3),(3-1-2-4),(3-1-2-5)(4-2-5),(4-2-1-3),(5-2-4),(5-2-1-3)
    长度依次为3,3,1,2,2,2,4,4,4,4,4,4。和为37
    数据范围
    对于30%的数据N≤300
    对于70%的数据N≤3,000
    对于100%的数据对于所有输入的整数均不大于100,000。
    输入的树保证连通,无重边,无自环。
    【来源】
    在此键入。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 #define maxn 100005
     6 #define ll long long
     7 using namespace std;
     8 void Emine(){
     9     freopen("senso.in","r",stdin);
    10     freopen("senso.out","w",stdout);
    11 }
    12 int read(){
    13     int x=0,f=1;char ch=getchar();
    14     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    15     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    16     return x*f;
    17 }
    18 int n,m,cnt,last[maxn],yd,siz1[maxn],siz2[maxn],out[maxn];
    19 ll ans=0;
    20 struct edge{int to,next,cost,flag;}e[maxn<<1];
    21 void add(int u,int v,int w){e[++cnt].to=v;e[cnt].next=last[u];last[u]=cnt;e[cnt].cost=w;}
    22 void dfs(int x){
    23     siz1[x]=1;
    24     for(int i=last[x];i;i=e[i].next){
    25         if(siz1[e[i].to])continue;
    26         e[i].flag=1;
    27         dfs(e[i].to);
    28         siz1[x]+=siz1[e[i].to];
    29         siz2[x]+=siz2[e[i].to];
    30     }
    31 }
    32 int main(){
    33     Emine();
    34     n=read(),m=read();
    35     for(int i=1;i<=m;i++){
    36         int w=read(),u=read(),v=read();
    37         add(u,v,w);add(v,u,w);
    38         out[u]++,out[v]++;
    39     }
    40     for(int i=1;i<=n;i++)if(out[i]==1)siz2[i]=1,yd++;
    41     dfs(1);
    42     for(int i=1;i<=(m<<1);i++){
    43         if(!e[i].flag)continue;
    44         ans+=1ll*(n-siz1[e[i].to])*siz2[e[i].to]*e[i].cost;
    45         ans+=1ll*siz1[e[i].to]*(yd-siz2[e[i].to])*e[i].cost;
    46     }
    47     printf("%lld",ans);
    48     return 0;
    49 }
    View Code

    1644. 行动!行动!
    ★   输入文件:moved.in   输出文件:moved.out   简单对比
    时间限制:1 s   内存限制:256 MB
    【题目描述】
    大CX国的大兵Jack接到一项任务:敌方占领了n座城市(编号0~n-1),有些城市之间有双向道路相连。Jack需要空降在一个城市S,并徒步沿那些道路移动到T城市。虽然Jack每从一个城市到另一个城市都会受伤流血,但大CX国毕竟有着“过硬”的军事实力,它不仅已经算出Jack在每条道路上会损失的血量,还给Jack提供了k个“简易急救包”,一个包可以让Jack在一条路上的流血量为0。Jack想知道自己最少会流多少血,不过他毕竟是无脑的大兵,需要你的帮助。
    【输入格式】
    第一行有三个整数n,m,k,分别表示城市数,道路数和急救包个数。
    第二行有两个整数,S,T。分别表示Jack空降到的城市编号和最终要到的城市。
    接下来有m行,每行三个整数a,b,c,表示城市a与城市b之间有一条双向道路,c表示Jack在这条路上损失的血量。
    【输出格式】
    Jack从S到T最少要流的血量。
    【样例输入】
    5 6 1
    0 3
    3 4 5
    0 1 5
    0 2 100
    1 2 5
    2 4 5
    2 4 3
    【样例输出】
    8
    【提示】
    数据范围:
    对于30%的数据,2<=n<=50,1<=m<=300,k=0;
    对于50%的数据,2<=n<=600,1<=m<=6000,0<=k<=1;
    对于100%的数据,2<=n<=10000,1<=m<=50000,0<=k<=10.
    【来源】
    在此键入。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<queue>
     6 #define maxn 10005
     7 #define maxm 50005
     8 #define ll long long
     9 using namespace std;
    10 void Emine(){
    11     freopen("moved.in","r",stdin);
    12     freopen("moved.out","w",stdout);
    13 }
    14 int read(){
    15     int x=0,f=1;char ch=getchar();
    16     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    17     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    18     return x*f;
    19 }
    20 int n,m,k,s,t,last[maxn],cnt;
    21 ll dis[maxn][12],minn=0x7fffffff;
    22 struct edge{int to,next,cost,flag;}e[maxm<<1];
    23 void add(int u,int v,int w){e[++cnt].to=v;e[cnt].next=last[u];last[u]=cnt;e[cnt].cost=w;}
    24 struct node{
    25     int id,num;ll d;
    26     node(){}
    27     node(int a,int b,ll c){id=a;num=b;d=c;}
    28     bool operator < (const node &b) const {
    29         return d>b.d;
    30     }
    31 };
    32 void dijkstra(){
    33     priority_queue<node> Q;
    34     memset(dis,0x3f3f3f3f,sizeof(dis));
    35     Q.push(node(s,0,0));
    36     while(!Q.empty()){
    37         node u=Q.top();Q.pop();
    38         for(int i=last[u.id];i;i=e[i].next){
    39             if(dis[e[i].to][u.num]>u.d+e[i].cost){
    40                 dis[e[i].to][u.num]=u.d+e[i].cost;
    41                 Q.push(node(e[i].to,u.num,u.d+e[i].cost));
    42             }
    43             if(u.num<k){
    44                 if(dis[e[i].to][u.num+1]>u.d){
    45                     dis[e[i].to][u.num+1]=u.d;
    46                     Q.push(node(e[i].to,u.num+1,u.d));
    47                 }
    48             }
    49         }
    50     }
    51 }
    52 int main(){
    53     Emine();
    54     n=read(),m=read(),k=read(),s=read(),t=read();
    55     for(int i=1;i<=m;i++){
    56         int u=read(),v=read(),w=read();
    57         add(u,v,w);add(v,u,w);
    58     }
    59     dijkstra();
    60     for(int i=0;i<=k;i++)minn=min(minn,dis[t][i]);
    61     printf("%lld
    ",minn);
    62     return 0;
    63 }
    View Code
  • 相关阅读:
    简单两步快速实现shiro的配置和使用,包含登录验证、角色验证、权限验证以及shiro登录注销流程(基于spring的方式,使用maven构建)
    使用postgre数据库实现树形结构表的子-父级迭代查询,通过级联菜单简单举例
    关于cas-client单点登录客户端拦截请求和忽略/排除不需要拦截的请求URL的问题(不需要修改任何代码,只需要一个配置)
    javacpp-opencv图像处理系列:国内车辆牌照检测识别系统(万份测试车牌识别准确率99.7%以上,单次平均耗时39ms)
    最全面的Java字节byte操作,处理Java基本数据的转换及进制转换操作工具,流媒体及java底层开发项目常用工具类
    基于java.util.logging实现轻量级日志记录库(增加根据当前类class初始化,修复线程池模型(javaEE)下的堆栈轨迹顺序与当前调用方法不一致问题)
    java原生实现屏幕设备遍历和屏幕采集(捕获)等功能
    用java实现简单快速的webservice客户端/数据采集器(支持soap1.1和soap1.2标准,支持utf-8编码)
    javacpp-opencv图像处理3:使用opencv原生方法遍历摄像头设备及调用(增加实时帧率计算方法)
    mybatis批量增、删、改(更新)操作oracle和mysql批量写法小记
  • 原文地址:https://www.cnblogs.com/Emine/p/7794819.html
Copyright © 2020-2023  润新知