177 条题解
-
-1
·cpp
#include<bits/stdc++.h> using namespace std; #define set(x) Set(x) #define REP(i,j,k) for (int i=(j),_end_=(k);i<=_end_;++i) #define DREP(i,j,k) for (int i=(j),_start_=(k);i>=_start_;--i) #define mp make_pair #define x first #define y second #define pb push_back template<typename T> inline bool chkmin(T &a,const T &b){ return a > b ? a = b, 1 : 0; } template<typename T> inline bool chkmax(T &a,const T &b){ return a < b ? a = b, 1 : 0; } typedef long long LL; typedef pair<int,int> node; const int dmax = 1010, oo = 0x3f3f3f3f; int n, m; int a[dmax][dmax] , ans; int d[dmax], e[dmax]; priority_queue <node> q; inline bool operator >(node a,node b){ return a.y>b.y; } bool p[dmax]; void Set(int x){ p[x] = 1; } void unset(int x){ p[x] = 0; } bool check(int x){ return x != 1 && x != n && !p[x] && e[x] > 0; } void preflow(){ e[1] = oo; d[1] = n - 1; q.push(mp(1, n - 1)); set(1); while (!q.empty()) { bool flag = 1; int k = q.top().x; q.pop(), unset(k); DREP(i, n, 1) if ((d[k] == d[i] + 1 || k == 1) && a[k][i] > 0){ flag = 0; int t = min(a[k][i], e[k]); e[k] -= t; a[k][i] -= t; e[i] += t; a[i][k] += t; if (check(i)) { q.push(mp(i, d[i])); set(i); } if (e[k] == 0) break; } if (flag) { d[k] = oo; REP(i, 1, n) if (a[k][i] > 0) chkmin(d[k], d[i] + 1); } if (check(k)) { q.push(mp(k, d[k])); set(k); } } ans = e[n]; } int main() { n = 2, m = 2; int x, y; scanf("%d%d", &x, &y); a[1][2] += x + y; preflow(); printf("%d\n", ans); return 0; } //绝对AC
-
-1
p#include <iostream> #include <cstdio> #include <cstring> using namespace std; int pow(int a,int b){//简单较慢的快速幂,但是很简单 if(b==0)//递归边界之一:a^0=1(暂且不考虑a=0) return 1; if(b==1)//递归边界之二:a^1=a return a; if(b==2)//递归边界之三:a^2=a*a return a*a; if(b%2==0)//快速幂的核心递归部分:当2|b时,a^b=(a^(b/2))^2 return pow(pow(a,b/2),2); else//递归部分:当b%2=1时,a^b=a^(b-1)*a return pow(a,b-1)*a; } struct integer { short i[126];//四位一压,所以共有126*4=504位,不会爆 bool pn;//我还考虑了符号...... integer( ){//构造函数初始化 int j; pn=false; for(j=0;j<126;j++) i[j]=0; }//这个应该都看得懂吧...... void read( ){//成员函数负责读入 int j,k,m=0,n=0; char ii[504]={0}; bool zero=true; scanf("%s",ii);//读入 if(ii[0]=='-')//正负处理 pn=true; else pn=false; for(j=503;j>-1;j--)//处理绝对值 if(ii[j]>0){//找到个位 for(k=j;k>-1;k--) if(ii[k]>='0' && ii[k]<='9') { n++; i[m]+=pow(10,n-1)*(ii[k]-'0');//这一步最难懂,慢慢琢磨,想一想怎么往高插入 if(n==4){//四位一压,别过界 n=0; m++; } } break; } for(j=0;j<126;j++) if(i[j]>0) zero=false; if(zero) pn=false; return; } void write( ){//成员函数负责输出 int j,k,a,b,c,d; bool zero=true; for(j=0;j<126;j++)//分清楚0和-0是一码事 if(i[j]>0) zero=false; if(zero) pn=false; if(pn)//负号 putchar('-'); for(j=125;j>-1;j--)//找到最高位 if(i[j]>0) { cout<<i[j];//省略前导0 for(k=j-1;k>-1;k--){//一定注意这里不能省略前导0!!!这也是为什么四位一压麻烦的原因之一 a=i[k]/1000; b=i[k]/100%10; c=i[k]/10%10; d=i[k]%10; putchar(a+'0'); putchar(b+'0'); putchar(c+'0'); putchar(d+'0'); } return; } putchar('0');//如果自始至终都是0(不进循环,即本数为0),输出0 return; } integer operator=(const int a){//把int型转化成integer自定义型 int b,j,k; bool zero=true; b=a;//注意a是const类型,不可改变! if(a<0){//对负数的处理 b=-b; pn=true; } else pn=false; for(j=0;j<126;j++){//想一想,为什么是10000不是10 i[j]=b%10000; b/=10000; if(b==0){ for(k=j+1;k<126;k++) i[k]=0; break; } } for(j=0;j<126;j++)//还是那句话,分清楚0和-0是一码事 if(i[j]>0) zero=false; if(zero) pn=false; return *this; } integer(int a){//重载运算符里最难懂的部分,注意一定要有这个(只要你有对赋值语句的重载最好都加上) *this=a; } integer operator+(const integer &a){//对加号的重载 integer b; int j; bool zero=true; if(*this==0)//0加任何数,仍得这个数 return a; else if(a==0) return *this; if(pn==a.pn){//同号两数相加,取相同的符号,并把绝对值相加 b.pn=pn; for(j=0;j<125;j++){ b.i[j]+=i[j]+a.i[j]; b.i[j+1]+=b.i[j]/10000;//还是那个问题,想想为什么是10000不是10 b.i[j]=b.i[j]%10000; } b.i[125]+=i[125]+a.i[125];//专防数组越界(即访问无效内存) b.i[j]=b.i[j]%10000; for(j=0;j<126;j++)//不多说了,你懂的 if(b.i[j]>0) zero=false; if(zero) b.pn=false; return b; } else{//异号两数相加,取绝对值较大数的符号,并把绝对值相减 int tw=0; integer x,y; x.pn=false; y.pn=false; for(j=0;j<126;j++){ x.i[j]=i[j]; y.i[j]=a.i[j]; } if(x>y){//判断哪个数的绝对值大 b.pn=pn; for(j=0;j<126;j++){ b.i[j]=i[j]-a.i[j]-tw; tw=0; if(b.i[j]<0){ b.i[j]+=10000; tw++; } } for(j=0;j<126;j++) if(b.i[j]>0) zero=false; if(zero) b.pn=false; return b; } else if(x<y){ b.pn=a.pn; for(j=0;j<126;j++){ b.i[j]=a.i[j]-i[j]-tw; tw=0; if(b.i[j]<0){ b.i[j]+=10000; tw++; } } for(j=0;j<126;j++) if(b.i[j]>0) zero=false; if(zero) b.pn=false; return b; } else{//互为相反数的两个数和为0 b=0; for(j=0;j<126;j++) if(i[j]>0) zero=false; if(zero) pn=false; return b; } } } bool operator>(const integer &a)const{//判断大小 int j; if(pn && (!a.pn))//负数小于正数 return false; else if((!pn) && a.pn)//正数大于负数 return true; else if(pn){//两个负数比较,绝对值大的反而小 for(j=125;j>-1;j--){ if(i[j]<a.i[j]) return true; else if(i[j]>a.i[j]) return false; } return false; } else{//两个正数比较,绝对值大的就大 for(j=125;j>-1;j--){ if(i[j]>a.i[j]) return true; else if(i[j]<a.i[j]) return false; } return false;//相等返回false } } bool operator<(const integer &a)const{//小于即大于的完全相反 return a>(*this); } bool operator==(const integer &a)const{//等于即既不大于又不小于 return !(*this>a || *this<a); } bool operator>=(const integer &a)const{//大于等于即不小于 return !(*this<a); } bool operator<=(const integer &a)const{//小于等于即不大于 return !(*this>a); } bool operator!=(const integer &a)const{//不等于就是不等于嘛 return !(*this==a); } }; int main( ) { integer a,b,c;//剩下的简单易懂 a.read( ); b.read( ); c=7; c.write( ); return 0; }
什么,太难了,那就来个简单的吧
cout << 7;
完事
-
-1
#include<bits/stdc++.h> using namespace std; #define set(x) Set(x) #define REP(i,j,k) for (int i=(j),end=(k);i<=end;++i) #define DREP(i,j,k) for (int i=(j),start=(k);i>=start;--i) #define mp make_pair #define x first #define y second #define pb push_back template<typename T> inline bool chkmin(T &a,const T &b){ return a > b ? a = b, 1 : 0; } template<typename T> inline bool chkmax(T &a,const T &b){ return a < b ? a = b, 1 : 0; } typedef long long LL; typedef pair<int,int> node; const int dmax = 1010, oo = 0x3f3f3f3f; int n, m; int a[dmax][dmax] , ans; int d[dmax], e[dmax]; priority_queue <node> q; inline bool operator >(node a,node b){ return a.y>b.y; } bool p[dmax]; void Set(int x){ p[x] = 1; } void unset(int x){ p[x] = 0; } bool check(int x){ return x != 1 && x != n && !p[x] && e[x] > 0; } void preflow(){ e[1] = oo; d[1] = n - 1; q.push(mp(1, n - 1)); set(1); while (!q.empty()) { bool flag = 1; int k = q.top().x; q.pop(), unset(k); DREP(i, n, 1) if ((d[k] == d[i] + 1 || k == 1) && a[k][i] > 0){ flag = 0; int t = min(a[k][i], e[k]); e[k] -= t; a[k][i] -= t; e[i] += t; a[i][k] += t; if (check(i)) { q.push(mp(i, d[i])); set(i); } if (e[k] == 0) break; } if (flag) { d[k] = oo; REP(i, 1, n) if (a[k][i] > 0) chkmin(d[k], d[i] + 1); } if (check(k)) { q.push(mp(k, d[k])); set(k); } } ans = e[n]; } int main() { n = 2, m = 2; int x, y; scanf("%d%d", &x, &y); a[1][2] += x + y; preflow(); printf("%d\n", ans); return 0; } //#include <bits/stdc++.h> //using namespace std; //struct Plus //{ // int a,b;//定义一个结构体 //}; //stack<int> sta;//定义一个栈 //int main() //{ // Plus c;//结构体变量 // cin >> c.a >> c.b; // sta.push(c.a);//入栈 // sta.push(c.b); // int s; // s += sta.top();//输出栈顶元素 // sta.pop();//出栈 // s += sta.top(); // cout << s;//输出总和 // return 0; //} //#include <bits/stdc++.h> //using namespace std; //int n = 2, a[5], s; //int dfs(int x, int sum) { // if (x > n) return sum; // int i = dfs(x + 1, sum); // int j = dfs(x + 1, sum + a[x]); // if (i == s) return i; // if (j == s) return j; // return -1; //} //int main() { // for (int i = 1;i <= n; i++) scanf("%d", &a[i]), s += a[i]; // cout << dfs(1, 0) << endl; // return 0; //} //#include <bits/stdc++.h> //using namespace std; //int d[5][5], n = 3; //int main() { // int a, b; scanf("%d%d", &a, &b); // memset(d, 0x3f, sizeof d); // d[1][2] = a; d[2][3] = b; // for (int k = 1;k <= n; k++) // for (int i = 1;i <= n; i++) // for (int j = 1;j <= n; j++) // d[i][j] = min(d[i][j], d[i][k] + d[k][j]); // printf("%d\n", d[1][3]); // return 0; //} //#include <iostream> //#include <cstring> //#include <algorithm> //#include <numeric> //#include<iterator> //using namespace std; //int main() //{ // istream_iterator<int> in(cin), eof; // cout << accumulate(in, eof ,0) << endl; // return 0; //} //#pragma GCC diagnostic error "-std=c++11" //#pragma GCC target("avx") //#pragma GCC optimize(1) //#pragma GCC optimize(2) //#pragma GCC optimize(3) //#pragma GCC optimize("Ofast") //#pragma GCC optimize("inline") //#pragma GCC optimize("-fgcse") //#pragma GCC optimize("-fgcse-lm") //#pragma GCC optimize("-fipa-sra") //#pragma GCC optimize("-ftree-pre") //#pragma GCC optimize("-ftree-vrp") //#pragma GCC optimize("-fpeephole2") //#pragma GCC optimize("-ffast-math") //#pragma GCC optimize("-fsched-spec") //#pragma GCC optimize("unroll-loops") //#pragma GCC optimize("-falign-jumps") //#pragma GCC optimize("-falign-loops") //#pragma GCC optimize("-falign-labels") //#pragma GCC optimize("-fdevirtualize") //#pragma GCC optimize("-fcaller-saves") //#pragma GCC optimize("-fcrossjumping") //#pragma GCC optimize("-fthread-jumps") //#pragma GCC optimize("-funroll-loops") //#pragma GCC optimize("-fwhole-program") //#pragma GCC optimize("-freorder-blocks") //#pragma GCC optimize("-fschedule-insns") //#pragma GCC optimize("inline-functions") //#pragma GCC optimize("-ftree-tail-merge") //#pragma GCC optimize("-fschedule-insns2") //#pragma GCC optimize("-fstrict-aliasing") //#pragma GCC optimize("-fstrict-overflow") //#pragma GCC optimize("-falign-functions") //#pragma GCC optimize("-fcse-skip-blocks") //#pragma GCC optimize("-fcse-follow-jumps") //#pragma GCC optimize("-fsched-interblock") //#pragma GCC optimize("-fpartial-inlining") //#pragma GCC optimize("no-stack-protector") //#pragma GCC optimize("-freorder-functions") //#pragma GCC optimize("-findirect-inlining") //#pragma GCC optimize("-fhoist-adjacent-loads") //#pragma GCC optimize("-frerun-cse-after-loop") //#pragma GCC optimize("inline-small-functions") //#pragma GCC optimize("-finline-small-functions") //#pragma GCC optimize("-ftree-switch-conversion") //#pragma GCC optimize("-foptimize-sibling-calls") //#pragma GCC optimize("-fexpensive-optimizations") //#pragma GCC optimize("-funsafe-loop-optimizations") ///#pragma GCC optimize("inline-functions-called-once") //#pragma GCC optimize("-fdelete-null-pointer-checks") //#include <bits/stdc++.h> //using namespace std; //int main() { // int a, b; scanf("%d%d", &a, &b); // printf("%d", a + b); // return 0; //}
信息
- ID
- 1
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 6
- 标签
- 递交数
- 26220
- 已通过
- 8164
- 上传者