1 条题解
-
0
自动搬运
来自洛谷,原作者为

zct_sky
sto @jxbe6666 orz || 再起不能搬运于
2025-08-24 22:34:29,当前版本为作者最后更新于2021-12-02 00:27:45,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
思路:
为了使 队得分尽量多,又因为 队和 队各有 人,都可以改变 次。所以最好能让 队全赢(
这不是废话吗),那么最好将 队前 个人全部改成赢的,但是 队后面 个人不能改了,又因为 队输了就等于 队赢了,所以只需将 队后面 个人改成输的即可。代码:
#include<bits/stdc++.h> #define ll long long #define un unsigned using namespace std; inline int read(){//快读 int x=0,y=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')y=-1; ch=getchar(); } while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar(); return x*y; } inline void write(int x){//快输 if(x<0) putchar('-'),x=-x; if(x>9) write(x/10); putchar(x%10+48); return; } int a[1000010],b[1000010],n,m; int main(){ n=read(); for(int i=0;i<n;i++){ m=read();//输入 int M=m<<1; for(int j=0;j<M;j++)a[j]=read(); for(int j=0;j<M;j++)b[j]=read(); write(M),putchar('\n');//输出 for(int j=0;j<M;j++){ if(j<m)//使A队前n个人赢 if(b[j]==1) a[j]=3; else if(b[j]==2) a[j]=1; else a[j]=2; write(a[j]),putchar(' ');//输出 } putchar('\n'); for(int j=0;j<M;j++){ if(j>=m)//使B队后n个人输 if(a[j]==1) b[j]=2; else if(a[j]==2) b[j]=3; else b[j]=1; write(b[j]),putchar(' ');//输出 } putchar('\n'); } return 0; }
- 1
信息
- ID
- 7226
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者