ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

27th.Feb.2019

2019-02-27 16:01:30  阅读:216  来源: 互联网

标签:a% 27th scanf 流量 else && printf Feb.2019


T1


  • 题目虽然叫循环流,但是本题却和网络流没有什么关系,你只需要循环流的性质,流入量等于流出量就好。
  • 好的,我们来看下一数据范围。

  • 是不是突然觉得稳了?我们有a,b两种边,那么枚举每一条边,然后枚举两两点对,显然有一个复杂度为\((n*n)^{a+b}\)*n的算法,就是枚举所有情况,然后判断是否可行。这样可以有35分。
  • 啊咧?这分也不高啊。莫慌,子任务3的数据虽然有点大吧,但是十几分钟总是可以跑出来的,打个表就好了。恩50分到手了。
  • 打表还有一点用处,就是你方便找规律确定自己猜的结论的正确性。
  • 考虑怎样用给定的边构造一个循环流,显然是流量为1的所有边形成一个环,流量为2的所有边形成一个环,环独自流量守恒,且互不影响,如果形成的环之间还是联通的,那么就构造出了可行解。不过这个是有特殊情况的,比如说一个流量为2的边可以结合若干个流量为1的边形成两个环。或者流量为2的边不够用,1来凑。
  • 你画若干个图之后,会发现以下结论:
    • 如果a=1,一定无解
    • 如果a和b其中一个为0,只需要另一个大于等于n就存在解。否则无解
    • 如果a+b<n,一定无解
    • 如果a+b>n,并且a!=1,一定有解。
    • 注意特判n=2的情况,以上所述性质,2不满足!

Coding

#include<bits/stdc++.h>
using namespace std;
int t,n,a,b;
int main(){
    freopen("flow.in","r",stdin);
    freopen("flow.out","w",stdout);
    scanf("%d",&t);
    scanf("%d",&t);
    while(t--){
        scanf("%d%d%d",&n,&a,&b);
        if(n==2){
            if(a%2==1) printf("0\n");
            else if(a+b>=n&&a>0&&b%2==1&&a%2==0) printf("1\n");
            else if(a+b>=n&&a%2==0&&b%2==0) printf("1\n");
            else printf("0\n");
            continue;
        }
        if(a+b<n) printf("0\n");
        else if(a+b==n){
            if(a==0||b==0) printf("1\n");
            else printf("0\n");
        }else if(a+b>n){
            if(a==1) printf("0\n");
            else printf("1\n");
        }
    }
    return 0;
}

T2是一道神仙题,我只会15分的简单整除分块,所以就不写了。

T3感觉更不友好,暴力也不好想,就愉快的0分了。

标签:a%,27th,scanf,流量,else,&&,printf,Feb.2019
来源: https://www.cnblogs.com/kgxw0430/p/10444232.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有