A. Windblume Ode
题意是给你一个数组。然后要你求得一个子序列,这个子序列每个数的和是一个合数,并且是该数组能得到的最大的合数。输出这个子序列中每个元素的下标。

一开始看到这个题目的n的要求是大于等于3,又是求合数。想到3个数相加,如果是奇数,那么肯定有一个数是奇数,减去这个奇数就可以得到一个偶数。如果和是偶数,那么一定是合数。
3个数以上也是一样的。所以可以只删去一个数就可以使这个和从素数变成合数。
所以就先求得所有数的和,先判断和是不是合数。如果不是。
然后从小到大遍历一下删去这个数是否是合数即可。

#include <bits/stdc++.h>using namespace std;
#define ll long long
#define endl '\n'
const int inf = 0x3f3f3f3f;
const int MAXN = 1e5 + 10;
int n, m, T;
int flag;struct node {int data;int set;
};node a[MAXN];bool cmp(node x, node y)
{return x.data < y.data;
}
int main()
{std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> T;while (T--) {cin >> n;int sum = 0;for (int i = 1; i <= n; i++) {cin >> a[i].data;sum += a[i].data;a[i].set=i;}flag = 0;for (int i = 2; i < sum; i++) {if (sum % i==0) {flag = 1;break;}}// cout<<sum<<endl'if (flag) {cout << n << endl;for (int i = 1; i <= n; i++) {cout << i << " ";}cout << endl;} else {sort(a + 1, a + 1 + n, cmp);for (int i = 1; i <= n; i++) {int d = sum - a[i].data;for (int j = 2; j < d; j++) {if (d%j==0) {flag = a[i].set;// cout<<flag<<endl;break;}}if(flag) break;}cout << n - 1 << endl;for (int i = 1; i <= n; i++) {if (i == flag) {continue;}cout << i << " ";}cout << endl;}}return 0;
}

B. Omkar and Heavenly Tree
题意:给你n个节点和m个约束。让你构造一个满足m个约束的无向图。
一个约束由 a b c 三个数组成,即不能出现 a连接b 然后b连接c的情况。

因为每一个约束,约束的是中间的节点b两头不能是a 或c。
那么我们可以找到一个点,他没有被限制两边的点。我们就可以让所有的点都连接它即可。
同样是观察数据,题目给出的约束是m个,m<n。
所以至少是有一个点是不会被约束的。所以我们找出这个点即可,然后其他所有点都连接他即可。

#include <bits/stdc++.h>using namespace std;
#define ll long long
#define endl '\n'
const int inf=0x3f3f3f3f;
const int MAXN=1e5+10;
int n,m,T;
int flag; int vis[MAXN];
int main()
{std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>T;while(T--){cin>>n>>m;memset(vis,0,sizeof(vis));for(int i=1;i<=m;i++){int a,b,c;cin>>a>>b>>c;vis[b]=1;}for(int i=1;i<=n;i++){if(vis[i]==0){for(int j=1;j<=n;j++){if(i==j) continue;cout<<i<<" "<<j<<endl;}break;}}}return 0;
}

C. Omkar and Determination
题意:给你一个n*m的地图。'X’表示不可移动,‘.’表示可以移动,但是只能向上或者向左移动。并且移动方向上不能有不可以移动的点。
有k次查询,每次查询是一个区间(l,r)。会将这个区间的列单出拿出来,然后得到这个区间每个点是否可以移动出这个范围的图。无论是从上还是从左都可以。你要输出,是否可以根据这个每个点是否可以移动出这个范围的图,得到原来这个区间的可移动和不可移动的点。

所以题目就变成了,找出这个区间是否有点无论是否是可以移动的点,都被限制了不能移动。因为如果存在这样的点,那么你得到的图中,就无法得到这个点是可移动的还是不可移动的,因为无论是哪个他都移动不出这个范围。

满足这样的点的条件是,上面和左边都是不可以移动的点。这样他就移动不了了,
所以就遍历一下得到这些点即可。
因为每次区间查询都是得到区间的每一列。所以你就只要存每列得到多少个这样的点即可。
因为是区间查询,所以用前缀和来查询这个区间有没有这样的点即可。
然后问题就来了,就是第i列的点满足无法确定的条件之一是,这个点左边是不可以移动的点。
所以如果这个点要是无法确定,必须左边的这一列也要在区间里面。
所以求前缀和的时候,是

vis[r-1]-vis[l-1]
#include <bits/stdc++.h>using namespace std;
#define ll long long
#define endl '\n'
const int inf=0x3f3f3f3f;
const int MAXN=1e6+10;
int n,m,T;
int flag; char s[2][MAXN];
int vis[MAXN];
int main()
{std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>m;cin>>s[0];for(int i=1;i<n;i++){cin>>s[1];for(int j=1;j<m;j++){if(s[0][j]=='X'){if(s[1][j-1]=='X'){vis[j]++;}}}strcpy(s[0],s[1]);}for(int i=0;i<m;i++){vis[i]+=vis[i-1];}cin>>T;while(T--){int l,r;cin>>l>>r;if(l==r){cout<<"YES"<<endl;continue;}if(vis[r-1]-vis[l-1]){cout<<"NO"<<endl;}else{cout<<"YES"<<endl;}}return 0;
}

D. Omkar and the Meaning of Life
题意是有一个1到n的序列p。你要用最多2n次查询,得到这个序列p。
每次查询是你输出一个序列a 。然后会得到一个序列 b 。 bi=ai+pi;
然后会返回一个数,这个数是 b序列中出现两次或者两次以上的数的最小的下标。
如果不存在返回0;

因为可以查询2n次,所以其实可以每2次查询找到一个数即可。
一种做法是,每次选一个位置加1,然后其他位置都加2,这样就会使b数组中某个数出现两次,然后就会返回下标。因为,只会返回小的那个下标。如果是返回的是你选的那个位置,那这次查询就没有意义。但如果不是,那么就相当于找到了比这个位置的数大1的数的位置。就可以得到一些数关系。
所以可以再进行一轮查询,选择一个位置加2,然后其他位置都加1,然后返回的下标如果不是你选中的位置,那么就是比你选中的位置小1的数的位置。又可以确定一些数的关系。
因为这两轮查询,一个是找小1的数的位置,一个是找大1的数的位置。所以结合两轮查询,可以找到所有的数的位置对应关系,即比他大1的数的位置。
因为在查询中,如果不存在出现两次或两次以上的数就会返回0,所以nxt[0]存的就是数字1的位置。
因为在某次查询时。找不到比他小1的数的位置,根据

 nxt[m]=i;//m为查询到的位置。

就将其存了下来,然后遍历一遍即可。

还有一种做法就是。以最后一个数为基准
第一轮查询是,最后一个位置每次都加1,然后其他位置的数从2加到n。
这样每次都可以得到一个下标的数和最后一个数的差距,然后这轮查询之后,就可以统计出有多少的数比他小,就可以得到最后一个数是多少,然后再进行一轮查询。每个数都加1,最后一个数从2加到n即可得到剩下的数是多少。

#include <bits/stdc++.h>using namespace std;
#define ll long long
#define endl '\n'
const int inf = 0x3f3f3f3f;
const int MAXN = 1e5 + 10;
int n, m, T;
int flag;int a[200];
int ans[200];
int nxt[200];int main()
{cin >> n;for (int i = 1; i <= n; i++) {cout << "? ";for (int j = 1; j <= n; j++) {if (j == i) {cout << "1 ";} else {cout << "2 ";}}cout << endl;fflush(stdout);cin >> m;if (m != i) {nxt[m] = i;}cout << "? ";for (int j = 1; j <= n; j++) {if (i == j) {cout << "2 ";} else {cout << "1 ";}}cout << endl;cin >> m;if(m!=i){nxt[i]=m;}fflush(stdout);}cout<<"! ";int cnt = 0, now = nxt[0];while(now) ans[now] = ++cnt, now = nxt[now];for(int i=1;i<=n;i++){cout<<ans[i]<<" ";}cout<<endl;return 0;
}

Codeforces Round #749 (Div. 1 + Div. 2, based on Technocup 2022 Elimination Round 1)相关推荐

  1. Codeforces Round #759 (Div. 2, based on Technocup 2022 Elimination Round 3)

    感觉E思路明确只用了stl+树状数组,F线段树复合修改,为什么都是2400. A. Life of a Flower B. Array Eversion C. Minimize Distance E. ...

  2. Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】...

    传送门:http://codeforces.com/contest/1087/problem/C C. Connect Three time limit per test 1 second memor ...

  3. szu cf套题训练Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3)A~D题解报告

    A. Math Problem 题目大意:就是给你n个线段,你自己再添加一个线段d使得d和所有的线段都有交点,求d这个线段的最小长度是多少 解题思路: 1.首先看d线段的左端点,就是左端点选取的是所有 ...

  4. Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2)

    一场挺简单的CF,但是我打炸了啊 A. Search for Pretty Integers time limit per test 1 second memory limit per test 25 ...

  5. Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) 构造

    传送门 文章目录 题意: 思路: 题意: 给nnn个数,让你构造一个尽可能大的矩阵,其中每个点所在的行和列都不含相等元素. 思路: 假设构造的答案矩阵大小为a×ba×ba×b且a<=ba< ...

  6. Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) dfs + 思维

    传送门 文章目录 题意: 思路: 题意: 给一张图,求必须经过aaa点和bbb点的路径条数. 思路: 通过观察我们发现,这个路径无非就是x−>a−>b−>yx->a->b ...

  7. Technocup 2020 - Elimination Round 2 E. Rock Is Push dp

    传送门 文章目录 题意: 思路 题意: 给你一个n×mn×mn×m的方格,你初始在(1,1)(1,1)(1,1)点,有些位置有箱子,你可以走到某个位置向你的方向推动这个箱子,箱子不能出界,问你走到(n ...

  8. Codeforces Round #709 (Div. 2, based on Technocup 2021 Final Round) 题解

    文章目录 A. Prison Break B. Restore Modulo C. Basic Diplomacy D. Playlist E. Skyline Photo F. Useful Edg ...

  9. Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round)【A、B、C题】

    A. Contest for Robots 签到题,注意特判即可. #include <bits/stdc++.h> using namespace std; const int N=11 ...

最新文章

  1. 实现HttpHandlerFactory的方法
  2. 工厂设计模式——简单工厂模式——未完待续
  3. 从0搭建一个Springboot+vue前后端分离项目(四)利用Element框架搭建页面主体部分表格与侧边栏
  4. stcisp一直检测单片机_三种方法对比:STC51单片机实现免冷启动
  5. 在阿里云 ECS 上试图安装 SAP Commerce Cloud 的 137 错误
  6. 修改Header方法
  7. JM8.5中的7种宏块模式问题 - zhoujunming的专栏 - CSDN博客
  8. CVPR 2020丨MAML-Tracker: 用目标检测思路做目标跟踪? 小样本即可得高准确率
  9. python 异步 生产者 消费者_python 生产者消费者模式 - 刘江的python教程
  10. 作为一名开发者,没有实力和运气能干什么?
  11. matlab中 nntwarn off,network的subsindex的定义问题
  12. OAuth2.0认证流程原理
  13. 创建型模式之简单工厂模式
  14. C语言类型限定符(type specifier)(一)——volatile详细教程
  15. 闲扯资管创新1:短债基金和摊余成本法定开债基
  16. 与幼儿园小朋友一起过感恩节心得
  17. [vue3] 富文本
  18. java saas_应用系统的SaaS化的方案讨论
  19. 初学Java入门介绍
  20. STM32驱动sg90舵机失败

热门文章

  1. 每周读书#6 - 《写给大家的中国美术史》
  2. IOT-OS之RT-Thread(十一)--- FAL分区管理与easyflash变量管理
  3. 聚丙烯酸负载小鼠血清白蛋白(MSA)/大鼠血清白蛋白(RSA)/小麦麦清白蛋白;PAA-MSA/RSA
  4. 海斯凯尔获B轮融资 另类学霸创业记!
  5. 总感觉自己什么都不会,做什么都做不好怎么办?
  6. 20条最狠的潜规则!读完又爱又恨!
  7. 尚硅谷智慧校园-3、年级管理系统的实现
  8. ABBYY PDF Transformer+ Pro可以支持189种语言
  9. 说说Elasticsearch Segment合并
  10. 银行提供了整存整取定期存储业务,其存取分为一年、二年、三年、五年,到期凭存单支取本息