建一个平台网站需要多少钱,苏州seo关键词优化软件,网站网站建设网站,手机网站建设服务器A - Three Threes
题目大意#xff1a;给你一个整数n#xff0c;将这个数n输出n次。
呃呃 B - Pentagon
题目大意#xff1a;给你一个正五边形ABCDE#xff0c;给你任意两条边#xff0c;判断是否相等 主要问题要判断一下内边#xff1a;AD#xff0c;AC#xff0c;…A - Three Threes
题目大意给你一个整数n将这个数n输出n次。
呃呃 B - Pentagon
题目大意给你一个正五边形ABCDE给你任意两条边判断是否相等 主要问题要判断一下内边ADACEBECDB之间的关系因为内边的夹角都相等边也都相等正五边形所以内边都相等。要证明也可以画辅助线来证明但是这显而易见就不证明了。
#include bits/stdc.h
//#define int long long
#define per(i,j,k) for(int (i)(j);(i)(k);(i))
#define rep(i,j,k) for(int (i)(j);(i)(k);--(i))
#define fr first
#define se second
#define endl \n
using namespace std;string s1,s2;void yes(){coutYesendl;
}
void no(){coutNoendl;
}void solve(){cins1s2;if(s1[1]s1[0])swap(s1[0],s1[1]);//线段表示模式改成前面小端点后面大端点if(s2[1]s2[0])swap(s2[0],s2[1]);//可以少判断一半if(s1AB or s1BC or s1CD or s1DE or s1AE){//任意外边相等if(s2AB or s2BC or s2CD or s2DE or s2AE)return yes();return no();}if(s1AC or s1AD or s1BE or s1CE or s1BD){//任意内边相等if(s2AC or s2AD or s2BE or s2CE or s2BD)return yes();return no();}
}signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t1;while(t--)solve();return 0;
} C - Repunit Trio
题目大意对于序列{1111111111...}后面类推。你可以任意选取三个相加选取的数可以重复但是选取的方案不能重复来组成一个数x对于新序列升序{x1x2x3x4...}给你一个n输出xn。
思路因为n的范围只有333所以可以直接暴力枚举所有相加方案防止重复枚举开个set来存。
#include bits/stdc.h
#define int long long
#define per(i,j,k) for(int (i)(j);(i)(k);(i))
#define rep(i,j,k) for(int (i)(j);(i)(k);--(i))
#define fr first
#define se second
#define endl \n
using namespace std;vectorintv;
setints;
int cnt1,n;void solve(){cinn;v.push_back(1);v.push_back(11);v.push_back(111);v.push_back(1111);v.push_back(11111);v.push_back(111111);v.push_back(1111111);v.push_back(11111111);v.push_back(111111111);v.push_back(1111111111);v.push_back(11111111111);v.push_back(111111111111);for(int i0;iv.size();i)for(int j0;jv.size();j)for(int k0;kv.size();k)s.insert(v[i]v[j]v[k]);for(auto i:s){if(cntn){couti;break;}cnt;}
}signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t1;while(t--)solve();return 0;
} D - Erase Leaves
题目大意给你一颗树每次你可以删去一个叶子节点把节点1删掉至少要删掉多少个节点。
思路因为只能删叶子节点所以要把节点1删掉的话要把节点1先变成叶子节点。
假设节点1的儿子有2,3,4
那么只要删掉任意两个儿子节点1就可以变成叶子节点了。
所以我们只需要删掉节点1周围的所有子树然后加回最多节点数的子树即可。
#include bits/stdc.h
//#define int long long
#define per(i,j,k) for(int (i)(j);(i)(k);(i))
#define rep(i,j,k) for(int (i)(j);(i)(k);--(i))
#define fr first
#define se second
#define endl \n
using namespace std;const int N3e55;
int n,u,v,f[N],maxxINT_MIN,ans1;//注意此处ans1初始化默认节点1已经被删了
vectorinte[N];void dfs(int now,int fa){//求出每个节点下面都有多少个节点包含自己for(auto son:e[now])if(son!fa){dfs(son,now);f[now]f[son];}
}void solve(){cinn;per(i,1,n-1){cinuv;e[u].push_back(v);e[v].push_back(u);}per(i,1,n)f[i]1;//初始化为1即包含自己dfs(1,1);for(auto son:e[1]){//遍历节点1的儿子maxxmax(maxx,f[son]);//记录最大的子树ansf[son];//全部删了}coutans-maxxendl;//加回最大的子树
}signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t1;while(t--)solve();return 0;
} E - Takahashi Quest
吐槽看到这种题目格式还以为是dp题实际上没那么难
题目大意高桥将会经历n个事件每个事件可以描述为tixi。
如果ti1那么这里有一瓶xi药可以用来对付xi怪
如果ti2那么这里有一个xi怪
在所有怪都被干掉的情况下希望任意时刻高桥包里带的药的数量的最大值尽可能小。
最大值尽可能小比如高桥可以带10瓶药来干掉5个怪但是实际上只要5瓶药就可以了。
任意时刻1药 1药 1怪 1药 1怪 1药我们可以拿前面两个药来解决后面两个怪但是这样任意时刻的最大值会变成2然而实际上这个值为1就可以过关每次拿一个药来干一个怪。 思路贪心带后悔的贪心。
因为任意时刻的最大值要尽可能小所以我们能不带药就不带药因为可能还会遇到怪所以我们需要后悔前面某个不带药的时间节点来干掉怪。
这个某个节点要尽可能选后面的如果选前面的就会出现题目大意中说到的那个问题。
因为需要后悔所以要保留所有药。因为尽可能要选后面的可以开栈来维护所有药。
#include bits/stdc.h
//#define int long long
#define per(i,j,k) for(int (i)(j);(i)(k);(i))
#define rep(i,j,k) for(int (i)(j);(i)(k);--(i))
#define fr first
#define se second
#define endl \n
using namespace std;const int N2e55;
int n,t[N],x[N],ans,tmp;
bool take[N];
stackintq[N];//q[i]{j},药效为i的药{j}void no(){cout-1endl;
}void solve(){cinn;per(i,1,n)cint[i]x[i];per(i,1,n){if(t[i]1)q[x[i]].push(i);else{if(q[x[i]].empty())return no();else{take[q[x[i]].top()]true;q[x[i]].pop();}}}per(i,1,n){if(t[i]1 and take[i])tmp;else if(t[i]2)tmp--;ansmax(ans,tmp);}coutansendl;per(i,1,n){if(t[i]1)couttake[i] ;}
}signed main(){ios::sync_with_stdio(false),cin.tie(nullptr);int t1;while(t--)solve();return 0;
}