SRM 533 DIV2
很长时间没做TC了,再说自己做的也确实相当少,所以不是很熟+思路来的比较慢所以做得不是多么好,只做出了250pt,500pt的思路对还没敲完就结束了。话说TC,CF什么的真的很锻炼人的思维能力可就是老在晚上举行,所以弄得....
250pt就是求一个
x + z = d;
2*x + 4*y + 4*z = f;
y + z = t;推出公式计算即可:
500pt
题意:
给定你一个序列,里面含有一个-1其余都是非负数另开一个栈,按如下操作进行:
遇到大于0的进栈,遇到0取栈顶两个元素相加再放进栈,最后得到栈顶的元素为wantresult.
给出序列和wantresult,问-1这个位置如果是0就输出0,如果是非负数就输出非负数,否则输出-1
思路:
模拟,就是先将-1当做0处理看是否能够得到wantresult,如果不能再将-1当做1处理,我在这里直接就看了最后得到的栈顶元素是否等于wantresult,结果跑系统数据时错了,原因是可能-1这个位置本身去什么(除去0)都不会对栈顶元素造成影响,所以再把-1当做2放进去,检查一下两种情况下栈顶元素是否相同,若相同则输出-0;否则通过1得到的结果处理输出非负数。
View Code
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <queue> #include <stack> #include <set> #include <map> #include <string> #define CL(a,num) memset((a),(num),sizeof(a)) #define iabs(x) ((x) > 0 ? (x) : -(x)) #define Min(a,b) (a) > (b)? (b):(a) #define Max(a,b) (a) > (b)? (a):(b) #define maxn 50004 #define N 207 #define M 507 #define ll long long #define inf 0x7f7f7f7f #define MOD 100000007 #define lc l,m,rt<<1 #define rc m + 1,r,rt<<1|1 #define pi acos(-1.0) using namespace std; stack<ll> st1,st2,st3; class Suminator { public: int findMissing(vector <int> program, int wantedResult) { vector<ll>p; int i; int sz = program.size(); int idx = 0; for (int i = 0; i < sz; ++i) { if (program[i] == -1) idx = i; p.push_back(program[i]); } for (i = 0; i < 200; ++i) { st1.push(0); st2.push(0); st3.push(0); } p[idx] = 0; for (i = 0; i < sz; ++i) { if (p[i] == 0) { ll a = st1.top(); st1.pop(); ll b = st1.top(); st1.pop(); st1.push(a + b); } else st1.push(p[i]); } if (st1.top() == (ll)wantedResult) return 0; p[idx] = 1; for (i = 0; i < sz; ++i) { if (p[i] == 0) { ll a = st2.top(); st2.pop(); ll b = st2.top(); st2.pop(); st2.push(a + b); } else st2.push(p[i]); } p[idx] = 2; for (i = 0; i < sz; ++i) { if (p[i] == 0) { ll a = st3.top(); st3.pop(); ll b = st3.top(); st3.pop(); st3.push(a + b); } else st3.push(p[i]); } if (st2.top() == st3.top()) return -1; ll ans = (ll)wantedResult - st2.top() + 1ll; if (ans >= 1ll) return (int)(ans); else return -1; } };
1000pt没看。。