今天算是来常州这几天考的最好的一次了(如果第一题把自己测数据的输入改掉)
以此来开启我的博客
0 + 100 + 100 + 98 = 298pts
t1 题目是这样的。后来重测了一下是100分,差一点就能考398分了,真的很想考好一次。
无穷序列 时间限制:2 秒 空间限制:128 MB 【题目描述】 现在有一个无穷的由 0 和 1 构成的序列:110100100010000100000...。 现在小 X 会给你若干个问题,请你求出这个序列的第 𝑖 位上是 0 还是 1。 【输入格式】 第一行一个正整数 𝑛,表示询问次数。 接下来的 𝑛 行,每行一个正整数 𝑎𝑖,𝑎𝑖 表示在序列中的位置。 【输出格式】 输出 𝑛 行,每行为一个 0 或 1,表示该序列第 𝑎𝑖 位上的数字。 【样例输入】 4 3 14 7 6 【样例输出】 0 01 0 【子任务】 对于 10% 的数据,1 ≤ 𝑛 ≤ 10,1 ≤ 𝑎𝑖 ≤ 100; 对于 20% 的数据,1 ≤ 𝑛 ≤ 100,1 ≤ 𝑎𝑖 ≤ 10000; 对于 40% 的数据,1 ≤ 𝑛 ≤ 1000,1 ≤ 𝑎𝑖 ≤ 106; 对于 70% 的数据,1 ≤ 𝑛 ≤ 10000,1 ≤ 𝑎𝑖 ≤ 107; 对于 90% 的数据,1 ≤ 𝑛 ≤ 105,1 ≤ 𝑎𝑖 ≤ 108; 对于全部的数据,1 ≤ 𝑛 ≤ 1.5 × 106,1 ≤ 𝑎𝑖 ≤ 109; 【提示】 请使用高效的输入方法。
我交的代码(看都没看,可以说只有我是0分):
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,c;
signed main(){
freopen("seq.in","r",stdin);freopen("seq.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin >> n;
for(int c = 1;c <= n;c++)
if(c == 1) cout << 1 <<"\n";
else if((ceil)(sqrt((c-1)*2)) - (int)(sqrt((c-1)*2)) == 1 && ((int)(sqrt((c-1)*2)) * (ceil)(sqrt((c-1)*2)) == (c-1)*2)) cout << 1 << "\n";
else cout << 0 << "\n";
}
return 0;
}
甚至连输入都没有🥹😂很遗憾,很悲伤,很淡然。
这样就对了,老师讲了一种二分方法,挺基础的,但我二分不好,不敢用
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,c;
signed main(){
// freopen("seq.in","r",stdin);freopen("seq.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin >> n;
while(n--){
cin >> c;
if(c == 1) cout << 1 <<"\n";
else if((ceil)(sqrt((c-1)*2)) - (int)(sqrt((c-1)*2)) == 1 && ((int)(sqrt((c-1)*2)) * (ceil)(sqrt((c-1)*2)) == (c-1)*2)) cout << 1 << "\n";
else cout << 0 << "\n";
}
return 0;
}
t2和t3大家基本都对的
t4比赛 时间限制:1 秒 空间限制:128 MB 【题目描述】 小 W 每月都会举办一场盛大的程序设计竞赛,来自全国各地的高手们都会参加,优 胜者会获得丰厚的奖励。 可是,某些选手为了尽可能获得更多的奖品,同时不被其他选手发现(如果大家看到 有人每次比赛都拿冠军可能会产生嫉妒),会注册若干个小号。同一个选手可能在一 场比赛中使用某个账号,在另一场比赛中则使用另一个账号。所以,虽然有大量的账 号在积极的参加小 W 的比赛,但是他觉得实际参加的人数可能并没有这么多。小 W 把参赛网站的注册用户数量 𝑛,和全部 𝑘 场比赛的参赛账号都告诉了你,想请你帮他 计算一下,在这些账号背后,最少有几个选手。 为了帮助你计算,我们设立如下的规则: • 每一个账号都属于一个选手,不存在多个选手共用同一个账号的情况,也不存 在无主的账号; • 一个选手不会在同一场比赛中使用多个账号; • 可能会有账号没有参加过任何比赛。 【输入格式】 第一行包含两个正整数 𝑛, 𝑘,分别表示参赛网站的注册用户总数,和比赛的数量。 接下来的 𝑘 行,每行首先包含一个正整数 𝑚,表示这一场比赛的参赛账号总数;随后 包含 𝑚 个正整数 𝑥1 , 𝑥2 , … , 𝑥𝑚,分别表示参加这一场比赛的账号。【输出格式】 输出共一行,包含一个正整数,表示最少有多少个不同的选手。 【样例输入】 6 3 2 1 2 3 2 3 4 4 4 5 1 2 【样例输出】 4 【样例解释】 3 号、5 号和 6 号账号属于同一人,其他账号各为一人持有,最少情况下有 4 人。 【子任务】 对于 2% 的数据,1 ≤ 𝑛 ≤ 10,𝑘 = 1; 对于 10% 的数据,1 ≤ 𝑛 ≤ 10; 对于 19% 的数据,𝑘 = 1; 对于 10% 的数据,𝑘 = 2; 对于所有的数据,1 ≤ 𝑛 ≤ 105,1 ≤ 𝑘 ≤ 3,1 ≤ 𝑚 ≤ 𝑛,1 ≤ 𝑥𝑖 ≤ 𝑛。
由于k的范围只有1到3,所以完全抱着骗分的目的去乱搞,结果竟然有98,1和2的时候就是输最大值,大部分3也是,但我列的第一个例子就不是,如果特判会不会满分呢(嘻嘻)还是很幸运。
本想下午弄弄2-SAT 但太困且眼睛痛(都是给自己找的理由)感觉根本没太理解,向大佬们求助qwq。
(最后,今天你拿到驾照了,好棒!!!恭喜jeremy❤)