首页 > 其他分享 >UOI 2023 An Array And Addition Again

UOI 2023 An Array And Addition Again

时间:2023-08-13 20:22:38浏览次数:45  
标签:Again 140 ops Addition back int 指令 push UOI

传送门:https://uoi2023-2.eolymp.io/problems/3

题目大纲:

给予一个整数 n 。 (n<=1e18)

你现在有一个数组 a, a 的所有号码为 0 除了 a[100] 为 1

你需要给一些指令, 每一个指令需要一个整数 s , 他会进行 d[s]+=d[s+1]

你需要找到一串指令使得 d[1]=n

输出指令的长度: 然后每个指令的 s 。

 

看到题目感觉一定是 log2(n)。因此考虑一直除二。

写个样例:n=140

140,70,35,17,8,4,2,1

很容易看到他一定是会到 1 的, 但是当我们看到奇数的时候要加 1 ?

所以我们本来的数组应为:

0,0,1,1,0,0,0,0  (1为特例,就算他是奇数也不需要)

但是怎么可能? 最后一个1 应该从后面来的。

 

考虑整个数组都为1先

1,1,1,1,1,1,1,1

但是我们现在的除就不是 floor( x / 2 ) 了 而是 floor( ( x - 1 )  / 2)

考虑 140 为样例: 140=1+2*x, x=(140-1)/2=69 以此类推

140,69,34,16,7,3,1

那么我们就可以看到现在偶数需要+2, 奇数需要+1

2,1,2,1,1,1

 

代码如下:

 1 #include<bits/stdc++.h>
 2 #define int long long
 3 using namespace std;
 4 void solve() {
 5     int n; cin >> n;
 6     auto ans = [&](vector<int> ops) {
 7         cout << ops.size() << '\n';
 8         for (int i = 0; i < (int)ops.size(); i++) cout << ops[i] << ' ';
 9         cout << '\n';
10     };
11     vector<int> v(1, n), ops, d(101); d[100] = 1;
12     while (v.back() > 1) v.push_back((v.back() - 1) / 2);
13     for (int i = 99; i >= 1; i--) {
14         ops.push_back(i); d[i] += d[i + 1];
15     }
16     for (int i = 0; i < (int)v.size() - 1; i++) {
17         if (v[i] % 2 == 0) {
18             ops.push_back(i + 1); d[i + 1] += d[i + 2];
19         }
20     }
21     if (d[1] == n) { ans(ops); return; }
22     for (int i = v.size() - 1; i >= 1; i--) {
23         if (d[i] == v[i - 1]) continue;
24         ops.push_back(i);
25         ops.push_back(i);
26     }
27     ans(ops);
28 }
29 signed main() {
30     ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
31     int tt, g; cin >> tt >> g;
32     while (tt--) solve();
33 }
34 //nyl,加油!!!

标签:Again,140,ops,Addition,back,int,指令,push,UOI
From: https://www.cnblogs.com/yonglicp/p/17627203.html

相关文章

  • centos7 Cannot retrieve metalink for repository: epel/x86_64. Please verify its
     备份原始的EPEL存储库配置文件(可选):在更改前,建议您先备份原始的EPEL存储库配置文件,以便在需要时恢复到默认设置。在终端中执行以下命令备份:sudocp/etc/yum.repos.d/epel.repo/etc/yum.repos.d/epel.repo.backup编辑EPEL存储库配置文件:使用文本编辑器(例如nano......
  • SequoiaDB分布式数据库2023.7月刊
    本月看点速览再获肯定!巨杉数据库入选德勤粤港澳大湾区及广州高科技高成长两大榜单《数据库发展研究报告(2023年)》发布,巨杉数据库参编携手华南理工大学,“巨杉数据库管理与应用奖学金”成功颁发青杉计划2023已开启,一起攀登更高的“杉” 再获肯定!巨杉数据库入选德勤粤港澳大湾......
  • HDU1702 ACboy needs your help again! 题解
    #include<iostream>#include<string>#include<queue>#include<stack>usingnamespacestd;intt,n,m;intmain(){cin>>t;while(t--){queue<int>q;stack<int>s;stringop,str......
  • Subsequence Addition
    #SubsequenceAddition(HardVersion)##题面翻译本题为困难版,两题的唯一区别在于数据范围的大小。数列$a$最开始只有一个数$1$,你可以进行若干次操作,每次操作你可以选取$k$个数($k$无限制,小于等于$a$的大小即可),将这$k$个数的和放入$a$的任意一个位置。给定一个长......
  • Codeforces 1696G - Fishingprince Plays With Array Again
    初读题目可以发现一些性质:每次操作会使整个序列的和减少至多\(X+Y\),因此\(ans\ge\dfrac{\suma_i}{X+Y}\)。对于两个不相邻位置\(a_i,a_j(|i-j|>1)\),每次操作最多使它们的和减少\(\max(X,Y)\)。然后你发现两个限制可以结合在一起使用,稍加思考可以得到一个比较普适的结论:......
  • 解决报错Cannot connect to the Maven process. Try again later. If the problem per
    故障描述:使用idea下载java某个源文件,idea报错:CannotconnecttotheMavenprocess.Tryagainlater.Iftheproblempersists,checktheMaven解决方案:修改maven的配置文件......
  • [ABC310F]Make 10 Again
    [ABC310F]Make10Again题意给定\(N\)个骰子,每个骰子会随机的出现数字\(1\)到\(A_i\),求能够从\(N\)个骰子中选若干个,使他们的点数之和为\(10\)的概率。\(N\leqslant100\)Solution第一眼思路为设计状态\(dp(i,j)\)为前\(i\)个骰子,点数之和为\(j\)的概率。......
  • vue: number addition
     单页应用:(SinglePageApp,SPA)体现了其强大的优势。页面是局部刷新的,响应速度快,不需要每次加载所有的CSS/JS。前后端分离,前端(手机端)不受后端(服务器端)的开发语言的限制。Angular,React,Vue.js框架都是很好的选择。https://github.com/vuejs/awesome-vue <!DOCTYPEhtml><......
  • Atcoder ARC159C Permutation Addition
    设\(s=\sum\limits_{i=1}^na_i\),考虑加上排列\(p\),那么\(s\leftarrows+\frac{n\times(n+1)}{2}\)。当有解时,因为\(a_i\)相等,所以有\(s\bmodn=0\)。考虑\(n\bmod2=1\)时,\(\frac{n\times(n+1)}{2}\bmodn=0\),所以\(s\bmodn=0\)时才会有解。......
  • SequoiaDB分布式数据库2023.6月刊
    本月看点速览全球溯源中心系列成果发布,巨杉数据库受邀出席聚焦产业升级,斩获新一代信息技术创新企业推进产业生态,赋能行业发展青杉计划2023已开启,一起攀登更高的“杉” 全球溯源中心系列成果发布,巨杉数据库受邀出席6月19日,“链接世界预鉴未来”——全球溯源中心系列......