赞
踩
本期封面来自黑神话:悟空 自己截的图
今天这场主要卡翻译,题面又臭又长,读得人很难受
给一个数组,每次可以选择相邻两个数(或是最后一个和第一个数),保证前一个数比后一个数小,然后随便删一个,问最少操作多少次能使数组都是同一个数
这个限制其实就等于完全没有限制,把原本数量最多的那个数字留下即可
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef double db; typedef pair<int,int> pii; typedef pair<ll,ll> pll; int st[114]; void solve() { int n; scanf("%d",&n); memset(st,0,sizeof(st)); vector<int> a(n); int maxn=0; for (int i=0;i<n;i++) { scanf("%d",&a[i]); st[a[i]]++; if(st[a[i]]>st[maxn]) { maxn=a[i]; } } int ans=n-st[maxn]; printf("%d\n",ans); } int main() { int T=1; scanf("%d",&T); while(T--) { solve(); } return 0; }
现在两个打字机,都只能按数字顺序打出字,就一个只能从左往右一个只能从右往左,构造一个长度为n的排列,让这两台打字机循环的次数最少
构造题,偶数肯定不行输出-1,奇数就是左右交替
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef double db; typedef pair<int,int> pii; typedef pair<ll,ll> pll; void solve() { int n; scanf("%d",&n); if(n%2==0) printf("-1\n"); else { vector<int> a(n); int cnt=1,l=0,r=n-1; while(l<r) { a[l]=cnt++; a[r]=cnt++; l++; r--; } a[l]=cnt++; for(int i=0;i<n;i++) printf("%d ",a[i]); printf("\n"); } } int main() { int T=1; scanf("%d",&T); while(T--) { solve(); } return 0; }
一个数有n个节点,在 15 n 15n 15n次询问之内只到这棵树的所有边,每次询问你给他两个点a和b,他会返回使 ∣ d ( a , x ) − d ( b , x ) ∣ |d(a,x) - d(b,x)| ∣d(a,x)−d(b,x)∣最小的那个x节点,如果有多个相同的会保证给的节点还最小化 d ( a , x ) d(a,x) d(a,x)。
主要是很难调,数据卡得很死,其实就是递归的一个过程,没问过的都问一遍就行了
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef double db; typedef pair<int,int> pii; typedef pair<ll,ll> pll; int n; int st[1114]; vector<pii> ans; void ask(int x,int y) { printf("? %d %d\n",x,y); fflush(stdout); int res; scanf("%d",&res); if(res==x or res==y) { ans.push_back({x,y}); st[res]=1; st[y]=1; return ; } if(st[x] and st[res]) { ask(res,y); } else { ask(x,res); ask(res,y); } } void solve() { scanf("%d",&n); if(n==2) { printf("! 1 2\n"); fflush(stdout); return ; } memset(st,0,sizeof(st)); for(int i=1;i<n;i++) { for(int j=i+1;j<=n;j++) { if(st[j]) continue; ask(i,j); } } printf("!"); for(auto x:ans) { printf(" %d %d",x.first,x.second); } printf("\n"); fflush(stdout); ans.clear(); } int main() { int T=1; scanf("%d",&T); while(T--) { solve(); } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。