2021级新生个人训练赛第38场

2023-11-15

问题 A: chicken

题目描述
小 x 非常喜欢小鸡翅。他得知 NSC 超市为了吸引顾客,举行了如下的活动:
一旦有顾客在其他超市找到更便宜的小鸡翅,NSC 超市将免费送给顾客 1000g 小鸡翅。小 x 为了尽可能的省钱,走遍了各大超市,统计了小鸡翅的价格。NSC 的工作人员通过不法手段盗取了这些资料。现在 NSC 的工作人员希望你能帮他们定一个尽可能低的价格(1000克 小鸡翅的价格),使小 x 吃不到免费的小鸡翅。
输入
第一行两个正整数 XNSC (1 ≤ XNSC ≤ 100) 和 YNSC (1 ≤ YNSC ≤1000),表示现在在 NSC 超市,YNSC 克 小鸡翅要卖 XNSC 元。
第二行一个正整数 N,表示其他超市的个数。
接下来 N 行,每行两个正整数 Xi(1 ≤ Xi ≤ 100) 和 Yi(1 ≤ Yi ≤ 1000),表示在第 i 家超市,Yi 克小鸡翅卖 Xi 元。
输出
有且仅有一行,包含一个实数 A,表示 NSC 超市可以定的最高价格:A 元/千克。A 保留两位小数。
样例输入 Copy
5 100
3
4 100
3 100
7 100
样例输出 Copy
30.00

签到题

#include<iostream>
#include<algorithm>
#include<iomanip>
using namespace std;
double x[100001],y[100001],s[100001];
int main()
{
    cin>>x[0]>>y[0];
    s[0]=(x[0]*(1000*1.0/y[0]));
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>x[i]>>y[i];
        s[i]=(x[i]*(1000*1.0/y[i]));
    }
    sort(s,s+n+1);
    cout<<fixed<<setprecision(2)<<s[0];
     
}

问题 B: match

题目描述
小 x 在解说 F7 决赛时的搭档是韩乔生,以至于小 x 没有任何能说上话的机会。无聊的他玩起了填字游戏。一个 3*3 的九宫格里,每个格子里都被填上了一个字母,从而我们得到了 6 个单词。现在,小 x 随手写了 6 个单词,他想让你帮他找到一种填字母的方案,使得这 6 个单词都出现在了九宫格里。
输入
共六行,每行一个长度为 3 的单词(全部大写)。
输出
如果找不到方案,输出“0”(不包含引号)
如果能找到,输出包含 3 行,第 i 行对应九宫格的第 i 行(最后一行行末要换行)。
如果有多种方案,请输出每种方案对应的字符串中字典序最前的一种(将行与行首尾相连,就可以得到一个字符串)。
样例输入 Copy
ANA
ANA
DAR
DAR
RAD
RAD
样例输出 Copy
DAR
ANA
RAD

思路:枚举每一种方案,并判断是否存在,如果存在就放到set中,然后输出第一个字符串就是我们的答案(输出的时候按照三行输出就行

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
# include<bits/stdc++.h>
# include<unordered_map>
 
 
# define eps 1e-9
# define fi first
# define se second
# define ll long long
# define int ll
// cout<<fixed<<setprecision(n) 
//bool operator<(const Node& x )
using namespace std;
typedef unsigned long long ull;
typedef pair<int,int > PII; 
const int mod=100000007;
const int N=2e6+10;
const int Time=86400;
const int X=131;
const int inf=0x3f3f3f3f;
const double PI = 1e-4;
double pai = 3.14159265358979323846; 
double e = exp(1);
 
int T,n,m,k,d,ans,maxn;
int f[1005][1005];
int a[N],b[N];
 
string s[10];
int st[6]={0,1,2,3,4,5};
set<string>q;
void solve(){
        for(int i = 0 ; i < 6 ; i ++ ) cin >> s[i];
        do{
            string res = "";
            res += s[st[0]];res+=s[st[1]];res+=s[st[2]];
            if(res[0] != s[st[3]][0] || res[3] != s[st[3]][1] || res[6] != s[st[3]][2]) continue;
            if(res[1] != s[st[4]][0] || res[4] != s[st[4]][1] || res[7] != s[st[4]][2]) continue;
            if(res[2] != s[st[5]][0] || res[5] != s[st[5]][1] || res[8] != s[st[5]][2]) continue;
            q.insert(res);
        }while(next_permutation(st,st+6));
        if(q.size() == 0) cout<<"0\n";
         else {string x;
              for(auto i : q){x = i ; break;}
               for(int i = 0 ; i < 9 ; i ++ ){
                     cout<<x[i];
                     if((i+1)%3 == 0) cout<<"\n";
                }
         }
}
/*
 
*/
signed main(){  
    std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); 
  // cin >> T;
       T = 1;
    while(T--){
        solve();
    } 
    return 0; 
}

问题 C: 【动态规划】cirs

题目描述
Czyzoiers 都想知道小 x 为什么对鸡蛋饼情有独钟。经过一番逼问,小 x 道出了实情:因为他喜欢圆。最近小 x 又发现了一个关于圆的有趣的问题:在圆上有2N 个不同的点,小 x 想用 N 条线段把这些点连接起来(每个点只能连一条线段),使所有的线段都不想交,他想知道这样的连接方案有多少种?
输入
有且仅有一个正整数 N(N≤3000)。
输出
要求的方案数(结果 mod 100000007)。
样例输入 Copy
2
样例输出 Copy
2

假如我们在圆上画了2n个点,顺时针编号为1,2,3,4……,你便会发现,如果一个奇数点和另一个奇数点相连,一定会造成将剩下所没有连线的点分在两边的都是奇数个,而后两边必定有一个点没线连或穿越其中的一条线,那么就不可能完成了。那么我们可以把奇数点看成左括号,偶数点看成右括号,然后把圆切开,就变成了一个括号匹配的方案数问题。为什么圆可以切开呢?因为A连B和B连A是同一种切法。

在这里可以用h(n)=C(2n,n)/(n+1),用扩展欧几里德求逆元。
根据费马小定理我们知道这样的结论在这里插入图片描述
固,我们可以结合卡特兰数+逆元完成本题答案 这题很难啊为啥这么多人对了

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
# include<bits/stdc++.h>
# include<unordered_map>
 
 
# define eps 1e-9
# define fi first
# define se second
# define ll long long
# define int ll
// cout<<fixed<<setprecision(n) 
//bool operator<(const Node& x )
using namespace std;
typedef unsigned long long ull;
typedef pair<int,int > PII; 
const int mod=100000007;
const int N=2e6+10;
const int Time=86400;
const int X=131;
const int inf=0x3f3f3f3f;
const double PI = 1e-4;
double pai = 3.14159265358979323846; 
double e = exp(1);
 
int T,n,m,k,d,s,ans,maxn;
int f[1005][1005];
int a[N],b[N];
 
int qsm(int a,int b){
     int res = 1;
     while(b){
          if(b&1) res = res * a % mod;
          a = a * a % mod;
          b >>= 1;
     }
     return res % mod;
}
void solve(){
           cin >> n;
           a[0] = a[1] = 1;
            for(int i=2;i<=n<<1;i++)a[i]=(a[i-1]*i)%mod;
            cout<<(((a[n<<1]%mod)*qsm(a[n+1],mod-2))%mod*qsm(a[n],mod-2))%mod;
         
}
 
/*
*/
signed main(){  
    std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); 
  // cin >> T;
       T = 1;
    while(T--){
        solve();
    } 
    return 0; 
}

问题 D: wtaxi

题目描述
话说小 x 有一次去参加比赛,虽然学校离比赛地点不太远,但小 x 还是想坐出租车去。大学城的出租车总是比较另类,有“拼车”一说,也就是说,你一个人坐车去,还是一堆人一起,总共需要支付的钱是一样的(每辆出租上除司机外最多坐下 4 个人)。刚好那天同校的一群 Oier 在校门口扎堆了,大家果断决定拼车去赛场。
问题来了,一辆又一辆的出租车经过,但里面要么坐满了乘客,要么只剩下一两个座位,众 Oier 都觉得坐上去太亏了,小 x 也是这么想的。
假设 N 位 Oier 准备拼车,此时为 0 时刻,从校门到目的地需要支付给出租车师傅 D 元(按车次算,不管里面坐了多少 Oier),假如 S 分钟后恰能赶上比赛,那么 S 分钟后经过校门口的出租车自然可以忽略不计了。现在给出在这 S 分钟当中经过校门的所有的 K 辆出租车先后到达校门口的时间 Ti 及里面剩余的座位 Zi(1 <= Zi <= 4),Oier 可以选择上车几个人(不能超过),当然,也可以选择上 0 个人,那就是不坐这辆车。
俗话说,时间就是金钱,这里小 x 把每个 Oier 在校门等待出租车的分钟数等同于花了相同多的钱(例如小 x 等待了 20 分钟,那相当于他额外花了 20 元钱)。
在保证所有 Oier 都能在比赛开始前到达比赛地点的情况下,聪明的你能计算出他们最少需要花多少元钱么?
输入
每组数据以四个整数 N , K , D , S 开始,具体含义参见题目描述。
接着 K 行,表示第 i 辆出租车在第 Ti 分钟到达校门,其空余的座位数为 Zi(时间按照先后顺序)。
N <= 100,K <= 100,D <= 100,S <= 100,1 <= Zi <= 4,1<= T(i) <= T(i+1) <= S
输出
对于每组测试数据,输出占一行,如果他们所有人能在比赛前到达比赛地点,
则输出一个整数,代表他们最少需要花的钱(单位:元),否则请输出“impossible”。
样例输入 Copy
2 2 10 5
1 1
2 2
样例输出 Copy
14

思路:考虑dp,设f[i][j] : 第i辆车j个人的最少花费
因为题目说到时间的消费等价于金钱,那我们转移的时候当然也要考虑多个人等待的时间拉。
转移方程为f[i][[j] = min(f[i][j],f[i-1][j-z]+d+a*z) z∈[0,b];

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
# include<bits/stdc++.h>
# include<unordered_map>
 
 
# define eps 1e-9
# define fi first
# define se second
# define ll long long
# define int ll
// cout<<fixed<<setprecision(n) 
//bool operator<(const Node& x )
using namespace std;
typedef unsigned long long ull;
typedef pair<int,int > PII; 
const int mod=1000000007;
const int N=2e6+10;
const int Time=86400;
const int X=131;
const int inf=0x3f3f3f3f;
const double PI = 1e-4;
double pai = 3.14159265358979323846; 
double e = exp(1);
 
int T,n,m,k,d,s,ans,maxn;
int f[1005][1005];
int a[N],b[N];
void solve(){
           cin >> n >> k >> d >> s;
           memset(f,inf,sizeof f);
           f[0][0] = 0;
           for(int i = 1 ; i <= k ; i ++ ) cin >> a[i] >> b[i];
           for(int i = 1 ; i <= k ; i ++ ){
              for(int j = 0 ; j <= n ; j  ++ ){
                      f[i][j] = f[i-1][j];
                      for(int z = 0 ; z <= b[i] ; z ++ )
                       f[i][j] = min(f[i][j],f[i-1][j-z]+d+a[i]*z);
                 }
           }  
           if(f[k][n] >= inf/2) cout<<"impossible\n";
            else cout<<f[k][n];  
             
}
 
/*
*/
signed main(){  
    std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); 
  // cin >> T;
       T = 1;
    while(T--){
        solve();
    } 
    return 0; 
}

问题 E: 听歌识曲

题目描述
洛洛有一份私人歌单,歌单里面塞满了他喜欢的歌曲,像夏恋、雨道、彩月、幻昼……整整有好几百首。洛洛每天都要把他的歌单听一遍,以致于他都能知道在什么时候放的是什么歌。
洛洛在向你推荐了他的歌单之后,决定考考你,从他的歌单开始播放起,第 t 秒正在播放的是第几首歌。

输入
第一行输入两个整数 n 和 t,分别表示歌单的歌曲总数以及第 t 秒播放哪首歌。
第二行有 n 个整数,A1, A2,…, An,分别表示歌单的第 i 首歌将会播放多长时间。

输出
输出一个整数,表示歌单按顺序播放后,第t秒播放的是第几首歌。
样例输入 Copy
样例输入1
3 5
5 5 5

样例输入2
3 5
1 4 5

样例输入3
3 5
1 3 5
样例输出 Copy
样例输出1
1

样例输出2
2

样例输出3
3
【样例3解释】
歌单中总共有三首歌:
第一首歌播放1秒,占第1秒;
第二首歌播放3秒,占第2-4秒;
第三首歌播放5秒,占第5-9秒。
所以第5秒播放的是第三首歌曲。

对于30%的数据,保证1≤n≤3;
对于60%的数据,保证1≤n≤2000,1≤Ai≤500;
对于100%的数据,保证1≤n≤100000,1≤Ai≤1000,1≤t≤在这里插入图片描述

签到题

#include<iostream>
using namespace std;
int a[100001];
int main()
{
    long long n,t;
    cin>>n>>t;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        if(t-a[i]<=0)
    {
        cout<<i;
        break;
    }
    else
    {
        t-=a[i];
    }
    }
     
     
}

问题 F: 多面骰子

题目描述
洛洛现在手上有三颗多面骰子,多面骰子不是常见的六面骰子,而是33面骰子、100面骰子……一般来说,i面骰子每个面上的点数分别是1,2,3,……i。
洛洛手上的三颗骰子的面数可能并不相同,他想知道掷出三颗骰子的所有情况中,三颗骰子的点数之和出现最多次数是几点。
如果存在多个点数之和出现次数相同的情况,则按点数之和从小到大顺序输出。

输入
第一行输入三个整数 n1, n2, n3,分别表示三颗骰子各自的面数。
输出
输出一行含任意个整数,分别表示次数最多的点数之和,用空格隔开。
样例输入 Copy
样例输入1
1 2 3

样例输入2
2 3 4
样例输出 Copy
样例输出1
4 5

样例输出2
6
提示
【样例解释】
样例1,骰子投出来有以下六种情况:
1+1+1=3 1+1+2=4 1+1+3=5
1+2+1=4 1+2+2=5 1+2+3=6
可以看出4和5的出现次数最多且都是2次。

对于50%的数据,保证1 ≤ n1,n2,n3 ≤ 5;
对于80%的数据,保证1 ≤ n1,n2,n3 ≤ 10。
对于100%的数据,保证1 ≤ n1,n2,n3 ≤ 100。

思路:因为范围再100以内所以可以n^3暴力直接做

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
# include<bits/stdc++.h>
# include<unordered_map>
 
 
# define eps 1e-9
# define fi first
# define se second
# define ll long long
# define int ll
// cout<<fixed<<setprecision(n) 
//bool operator<(const Node& x )
using namespace std;
typedef unsigned long long ull;
typedef pair<int,int > PII; 
const int mod=1000000007;
const int N=2e6+10;
const int Time=86400;
const int X=131;
const int inf=0x3f3f3f3f;
const double PI = 1e-4;
double pai = 3.14159265358979323846; 
double e = exp(1);
 
int T,n,m,k,ans,maxn;
map<int,int>mp;
void solve(){
         int n1,n2,n3;
         cin >> n1 >> n2 >> n3;
         for(int i = 1 ; i <= n1 ; i ++ )
          for(int j = 1 ; j <= n2 ; j ++ )
           for(int k = 1 ; k <= n3 ; k ++ ){
              mp[i+j+k]++;
              if(mp[i+j+k] > maxn){
                       maxn = mp[i+j+k];
                       ans = i + j + k;
                 }
           }
           for(auto i : mp) if(i.second == maxn) cout<<i.first<<" ";
               
             
}
 
/*
*/
signed main(){  
    std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); 
  // cin >> T;
       T = 1;
    while(T--){
        solve();
    } 
    return 0; 
}

问题 G: 花坛

题目描述
洛洛在散步的时候,看到公园的正方形花坛里开放着许多他不认识的花卉。仔细观察之后,他又发现这些花的种植位置是有规律的。
洛洛发现在正方形花坛的最外层,即第一层上的花都是同一颜色;而花坛的第二层,花的颜色又都是一样的……正方形花坛由若干层花构成,同一层上的花都是同一颜色的,不同层之间的花颜色不一定相同。如下图所示,是一个具有三层花的正方形花坛:
在这里插入图片描述

在回到家后,洛洛还记得花坛有几层花围成,以及每层花的颜色,花的颜色用英文大小写字母来表示。但是洛洛忘记了整个花坛的图像,洛洛希望你根据他的描述,把整个花坛的图像用计算机打印字符的方式表示出来。

输入
第一行输入一个整数 n,表示正方形花坛有n层花。
第二行输入n个字符,第i个字符表示第i层花的颜色。第一层是花坛最外层。第n层是花坛最内层,只有一朵花。

输出
输出2n-1行,由(2n-1)(2n-1)个字符组成的花坛的图像。
样例输入 Copy
样例输入1
3
abC

样例输入2
4
abac
样例输出 Copy
样例输出1
aaaaa
abbba
abCba
abbba
aaaaa

样例输出2
aaaaaaa
abbbbba
abaaaba
abacaba
abaaaba
abbbbba
aaaaaaa
提示
样例解释】
样例1,即如上图,只有三层花:
第一层是颜色为字符a的花,在最外层;
第二层是颜色为字符b的花,在第二层。
第三层是颜色为字符c的花,只有一朵,在最内层。

对于20%的数据,保证只有一种花,颜色为字符a;
对于50%的数据,保证1 ≤ n ≤ 10,颜色只用小写字母表示,
对于80%的数据,保证1 ≤ n ≤ 100。
对于100%的数据,保证1 ≤ n ≤ 1000,颜色用小写字母、大写字母表示。
注意:对于不同层的花朵来说,可能存在颜色相同的情况。

思路:很简单的一道模拟题,发现每个字母就正好赋值一圈,可以很容易得出一个结论就是如果有n个字母,那输出的就是一个2n-1行和2n-1列的矩阵。

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
# include<bits/stdc++.h>
# include<unordered_map>
 
 
# define eps 1e-9
# define fi first
# define se second
# define ll long long
# define int ll
// cout<<fixed<<setprecision(n) 
//bool operator<(const Node& x )
using namespace std;
typedef unsigned long long ull;
typedef pair<int,int > PII; 
const int mod=1000000007;
const int N=2e6+10;
const int Time=86400;
const int X=131;
const int inf=0x3f3f3f3f;
const double PI = 1e-4;
double pai = 3.14159265358979323846; 
double e = exp(1);
 
int T,n,m,k,ans,maxn;
string s;
char a[2005][2005];
void solve(){
          cin >> n >> s;
          k = 2 * n - 1;
          for(int j = 0 ; j < n ; j ++ ){
             for(int i = j ; i < k ; i ++ ) a[j][i] = a[i][k-1] = a[k-1][i] = a[i][j] = s[j];
             k--;
          }
          for(int i = 0 ; i < 2 * n - 1 ; i ++){
             for(int j = 0 ; j < 2 * n - 1 ; j ++ )
              cout<<a[i][j];
            cout<<"\n";
          }
               
               
             
}
 
/*
*/
signed main(){  
    std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); 
  // cin >> T;
       T = 1;
    while(T--){
        solve();
    } 
    return 0; 
}

问题 H: 排队

题目描述
洛洛在外出旅游的时候发现社会上文明的现象越来越多,人们在买票的时候都会自发地排队等候。
遗憾的是排队的人身高参差不齐,有时候前后两人之间的身高相差太大,缺乏一些美感。
如果把前后两人的身高差(差值为正数)表示为两者前后相邻时产生的违和度,一段连续的人群因为前后两人身高不同而产生的违和度之和就可以被称为违和值。洛洛希望知道在队伍哪一段,且该段队伍由连续的m个人组成,其违和值最小。

输入
第一行输入两个正整数 n,m,n表示队伍的总人数,m表示某一段的人数。
第二行输入n个整数,表示队伍中n个人的身高(单位:厘米)。

输出
输出包含一个整数,即最小的违和值。
样例输入 Copy
样例输入1
4 3
1 2 4 7

样例输入2
4 3
10 7 5 4
样例输出 Copy
样例输出1
3

样例输出2
3
提示
样例2说明:m=3,要选取3个连续的人有两种选法:
10 7 5: 违和度之和=3+2=5
7 5 4: 违和度之和=2+1=3
所以答案是3。

对于50%的数据保证2 ≤ n ≤ 10;
对于80%的数据保证2 ≤ n ≤ 1000;
对于100%的数据保证2 ≤ n ≤ 100000,1 ≤ m < n,每个人的身高不超过300厘米。

思路:考虑差分

#include<iostream>
#include<algorithm>
using namespace std;
int a[1000001],b[1000001],s[1000001];
int main()
{
    int n,m,mi=999999999;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    };
    b[1]=a[1];
    for(int i=2;i<=n;i++)
    {
        b[i]=abs(a[i]-a[i-1]);
    }
    s[1]=0;
for(int i=2;i<=n;i++)
{
    s[i]=b[i]+s[i-1];
}
for(int i=m;i<=n;i++)
{
    mi=min(mi,s[i]-s[i-m+1]);
}
cout<<mi;
     
     
}

问题 I: 最大回文数

题目描述
回文数指的是一个数字,从左到右读和从右到左读都一样。例如,1221和1234321是回文数,1234不是回文数。现有n个正整数ai(i=0,1,2,3,…n-1),请找出其中最大的回文数。
输入
第一行只有一个正整数n,代表正整数ai的个数。
接下来的n行,每行包含一个正整数ai。输入保证一定有回文数。
输出
一行,一个正整数,即最大的回文数。
样例输入 Copy
【样例1】
3
4718
1221
121
【样例2】
5
3944
953
8
75739
46
样例输出 Copy
【样例1】
1221
【样例2】
8
提示
对于30%的数据,1≤n≤100,1≤ai≤108。
对于60%的数据,1≤n≤1000,1≤ai≤1016。
对于100%的数据,1≤n≤104,1≤ai≤1032。

思路:暴力判断就行,复杂度O(n)

#include<iostream>
#include<algorithm>
using namespace std;
string e[100001];
bool cmp(string a,string b)
{
    if(a.size() ==b.size() )
    return a<b;
    else
    return a.size() <b.size() ;
}
int main()
{
long long n,mm=-1;
cin>>n;
int k=0;
while(n--)
{   
    string a,b;
    cin>>a;
    b=a;
    reverse(b.begin() ,b.end() );
    if(a==b)
    {
        e[k++]=a;
    }
}
sort(e,e+k,cmp);
cout<<e[k -1];
} 

问题 J: 金币

题目描述
乔治在梦中来到了一个神奇部落,这个部落的神树具有奇特的功能:对于每一位新朋友,都会获赠金币,而且金币的数量会随时间的延续而增加:
第1周,每天1枚金币;
第2周,每天2枚金币;
第3周,每天3枚金币;……
请问:至少多少天,乔治的金币数量达到n枚?
输入
一行,只有一个正整数n。
输出
一行,一个整数,表示金币达到n枚所需的最少天数。
样例输入 Copy
30
样例输出 Copy
17
提示
第1周:每天1枚,共7枚;
第2周:每天2枚,共14枚;
第3周:每天3枚,3天即可:7+14+3*3=30。
共计:7+7+3=17天。
【数据规模】
对于30%的数据,n不超过2147483647;
对于100%的数据,n的位数不超过18。

思路:二分在第几周,然后在精确判断是第X天,复杂度是O(logn)
注意二分时取右边界不要太大,自己粗略估计一下就行,取太大爆long long的。
别问我二分是啥或者代码里面二分什么意思,看得懂的自然看得懂,看不懂我讲了你也听不懂,看不懂建议立刻去学,很简单的

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
# include<bits/stdc++.h>
# include<unordered_map>
 
 
# define eps 1e-9
# define fi first
# define se second
# define ll long long
# define int ll
// cout<<fixed<<setprecision(n) 
//bool operator<(const Node& x )
using namespace std;
typedef unsigned long long ull;
typedef pair<int,int > PII; 
const int mod=100000007;
const int N=2e6+10;
const int Time=86400;
const int X=131;
const int inf=0x3f3f3f3f;
const double PI = 1e-4;
double pai = 3.14159265358979323846; 
double e = exp(1);
 
int T,n,m,k,d,s,ans,maxn;
int f[1005][1005];
int a[N],b[N];
 
bool check(int x){
     int sum = 7 * x * (x+1);
     return sum >= 2*n;
      
}
void solve(){
           cin >> n;
           int l = 0 , r = 2e9+10;
           while(l < r){
              int mid = l + r >> 1;
              if(check(mid)) r = mid;
               else l = mid + 1;
           }
           //cout<<l<<endl;
           ans = (l-1) * 7;
           m = (l-1)*(7+7*(l-1))/2;
           //cout<<m<<endl; 
           while(m < n){
               ans++;
               m+=l;
           }
           cout<<ans;
}
/*
 
*/
signed main(){  
    std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); 
  // cin >> T;
       T = 1;
    while(T--){
        solve();
    } 
    return 0; 
}

总结:这场除了C是个卡特兰数其他题目都是中等难度,还行0.0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2021级新生个人训练赛第38场 的相关文章

  • C++ 标准是否允许未初始化的 bool 导致程序崩溃?

    我知道一个 未定义的行为 C 几乎可以让编译器做任何它想做的事情 然而 我遇到了一次令我惊讶的崩溃 因为我认为代码足够安全 在这种情况下 真正的问题仅发生在使用特定编译器的特定平台上 并且仅在启用优化的情况下发生 我尝试了几种方法来重现问题
  • 氧图。如何将轴旁边的值格式从 1000 更改为 1k

    我正在尝试更改轴旁边的值的格式 例如从 1000 更改为 1k 或 1000000 更改为 1M 这在 LinearAxis 中可能吗 这是我的代码 m Axes Add new LinearAxis Position AxisPositi
  • TCP客户端;网络流;异步读取; C#

    请原谅我对任务和异步缺乏了解 使用 TcpClient 类 我正在创建与可用服务器的连接 void async RunClientAsync TcpClient client new TcpClient try await client C
  • C++ 天花板函数的奇怪结果

    我一直在尝试天花板功能并得到一些奇怪的结果 如果我对十进制数乘以百执行 ceil 运算 我会得到一定的结果 但是 如果我直接对该乘法的结果执行 ceil 我会得到完全不同的输出 另一个问题是 这些不同的结果仅发生在某些数字上 任何帮助 将不
  • 如何在 C# 中启动文件

    编辑 我觉得自己像个白痴 我有一种感觉 像下面的答案会起作用 但没有看到任何与下面的答案类似的谷歌结果 所以当我看到这段复杂的代码时 我想它一定是这样的 我搜索并找到了这个Windows 列出并启动与扩展关联的应用程序 https stac
  • 泛型类上的 DebuggerDisplay

    我在应用时遇到问题DebuggerDisplay泛型类的属性 DebuggerDisplay foo class Foo DebuggerDisplay Bar t class Bar
  • C++ 为非虚方法指定初始化

    我有 a h 如下所示 class A public void doSomething 0 然后我有 b h 如下所示 include a h class b public A public void doSomething 我只是想通过尝
  • 如何在C中递归地找到另一个字符串中的字符串位置?

    我们有一个任务来创建带有两个字符串参数的递归函数 原型应该是这样的 int instring char word char sentence 如果我们愿意调用函数 instring Word Another Word 它应该具有以下返回值
  • 谷歌基准迭代的意义是什么?

    我正在使用 Google Benchmark 来测量某些代码的执行时间 例如 我编写了以下代码来测量其执行时间性能 include
  • C++头文件问题

    我在处理类时尝试了一些 C 代码 这个问题出现在我身上 并且让我有点烦恼 我创建了一个包含类定义的头文件和一个包含实现的 cpp 文件 如果我在不同的 cpp 文件中使用此类 为什么要包含头文件而不是包含类实现的 cpp 文件 如果我包含类
  • 从 TFS 下载工作项附件(文件已损坏)

    我正在尝试创建 C 代码 因此我可以自动从 Team Foundation Server 下载 BUGS 预定义查询的所有附件 该代码似乎工作得很好 但所有下载的文件都因意外原因而损坏 我无法查看它们 有人可以看一下代码并分享意见吗 非常感
  • 为什么 C++ 元组如此奇怪?

    我通常创建自定义structs将不同类型的值分组在一起时 这通常很好 而且我个人发现命名成员访问更容易阅读 但我想创建一个更通用的 API 在其他语言中广泛使用元组后 我想返回类型的值std tuple但发现它们在 C 中使用比在其他语言中
  • Roslyn,通过 hostObject 传递值

    我正在尝试通过 hostObject 发送一个类 但显然它不想工作 using Roslyn Compilers using Roslyn Compilers CSharp using Roslyn Scripting using Rosl
  • 使用可变参数模板函数计算多个值的平均值

    我正在尝试编写一个函数来确定任意数量参数的平均值 所有参数都具有相同的类型 出于学习目的 我尝试使用可变参数模板函数来做到这一点 这是我到目前为止所拥有的 template
  • 我们可以使用 C# 录制发送到扬声器的声音吗

    我有一个软件 SoundTap Streaming Audio Recorder 它记录发送到扬声器的任何音频 无论流是来自网络还是来自某些文件或麦克风 我可以在桌面应用程序中制作这样的应用程序 以便我可以录制发送到扬声器的流 无论来源如何
  • 将 .NET 类库(主要定义 CRUD 操作)公开为服务

    公开现有内容的最佳 有效和最快的方法是什么 类 图书馆 主要定义 CRUD 操作 作为service 周转基金服务 or WCF数据服务 以便它可以与银光 or Ajax 在那儿tools 代码生成器 RAD 工具 哪些可以支持这个 预先感
  • 如何将这个基于代码的 WPF 工具提示转换为 Silverlight?

    以下工具提示代码适用于WPF 我正在努力让它发挥作用银光 但它给了我这些errors TextBlock does not contain a definition for ToolTip Cursors does not contain
  • 使用 System.Json 迭代 JSON

    我正在探索 NET 4 5 的功能System Json库 但没有太多文档 而且由于流行的 JSON NET 库 搜索起来相当棘手 我基本上想知道 我如何循环一些 JSON 例如 People Simon Age 25 Steve Age
  • 定义一个断言,即使定义了 NDEBUG,该断言也有效

    我想定义一个assert与标准相同的宏assert 3 http man7 org linux man pages man3 assert 3 html调用 但它不会被预处理器删除NDEBUG被定义为 这样的呼唤 让我们称之为assert2
  • 具有两个表的谓词构建器

    A Party可以有一个或多个Contact对象 我想选择全部Parties谁的街道名称包含特定关键字 如果我只想搜索Party我可以使用下面的代码 但我如何扩展它来搜索Contact public IQueryable

随机推荐

  • 12306 APP 同一乘客、同列火车候补订单与硬座的处理规则!

    问题 国庆节没抢到回家的火车票 候补了该列车的卧铺 怕候补不到车票 又买了该列车的硬座 当候补订单候补到卧铺车票时 怎么处理 方案 结论 直接候补不成功 提示 XX 二代身份证 xxx 存在与本次购票行程冲突的车票
  • ctfshow- web1(50 point)

    0x00 前言 CTF 加解密合集 CTF Web合集 0x01 题目 0x02 Write Up 首先映入眼帘的是登录界面 尝试弱口令无果 可以注册 尝试注册一个账号 通过url发现这里是通过order by进行了排序 测试发现一共5个字
  • CSDN竞赛6期题解

    CSDN编程竞赛报名地址 https edu csdn net contest detail 16 请不要删掉此地址 总结 这次竞赛题目比较简单 没多大必要写题解 更多的还是给出自己的一些体会和建议吧 很多同学已经对比赛规则和编程体验给出了
  • 使用mod_deflate模块压缩页面优化传输速度

    在HTTPD主配置文件中添加如下 并确保deflate模块是启用的 vim etc httpd conf httpd conf SetOutputFilter DEFLATE 调用一个叫DEFLATE输出过滤器 mod deflate co
  • 信息与网络安全基础知识汇总

    一 概述 1 网络信息安全基本概念 信息安全 是指信息网络中的硬件 软件及其系统中的数据受到保护 不受偶然的或者恶意的原因而遭到破坏 更改 泄露 否认等 系统连续可靠正常的运行 信息服务不中断 密码学 是结合数学 计算机科学 电子与通信等学
  • Linux的find命令

    一 find语法 find path option print exec ok command find 路径 参数 二 使用 通过文件名查找 find name 文件名 find etc name passwd 查找 etc目录下的pas
  • easychat项目讲解

    项目简介 本项目是基于Websocket和Servlet实现的多用户聊天室 实现了聊天所需的一些基本功能 功能描述 1 用户信息注册 2 登录 同时标识上 下线用户 3 私聊 点击好友列表中指定用户进行私聊 4 群聊 点击好友列表指定用户建
  • 2023最新ELK搭建教程,基于ES 8

    一 ELK介绍 ELK的应用 ELK的应用场景 日志查询 问题排查 上线检查服务器监控 应用监控 错误报警Bug管理性能分析 用户行为分析 安全漏洞分析 企业 行业 ELK用途 阿里巴巴 电子商务 云计算 用于日志管理和实时监控 腾讯 互联
  • 蓝桥杯客观题知识点

    一 异步和同步的在于 有无统一的时钟信号 异步无 同步有 RS485 半双工 异步 串行 差分输入 多级通信 USB 键盘等外设 RS232 全双工 异步 串行 单端输入 一对一通信 二 组合逻辑电路和时序逻辑电路的区别 组合 任意时刻的输
  • 整数转换成罗马数字

    给定一个整数num 1 lt num lt 3999 将整数转换成罗马数字 如1 2 3 4 5对应的罗马数字分别位I II III IV V等 格式 第一行输入一个整数 接下来输出对应的罗马数字 输入 123 输出 CXXIII 我的解法
  • 如何让Object 变得有序

    如何让Object 变得有序 1 方法一 继承Comparable 实现CompareTo方法 CompareTo 只有一个参数 但它有四个限制条件 具体我也没有研究 可查看相关信息 如果该类实现这个方法它就具有比较规则定义 那么以后放在C
  • SpringBoot——配置文件的分类

    简单介绍 在之前我们写配置文件的时候 我们直接在项目中的resources下面编写的配置文件 其实除了在这个路径下编写配置文件 还可以在其他的地方编写配置文件 并且不同位置的配置文件在启动的时候的优先级也是不一样的 1 在resources
  • java list 默认排序_List集合排序(默认及自定义排序)

    一 java提供的默认list排序方法 主要代码 List list new ArrayList list add 王硕 list add 刘媛媛 list add 刘迪 list add 刘布 升序 Collections sort li
  • 数据类型与printf,scanf函数

    printf与scanf函数 printf函数是一个格式化输出函数 scanf 函数则是一个输入函数 其一般的调用格式 scanf 格式控制 地址列表 其中格式控制一般是双引号中间加一些字符 由 与格式符组成 用于控制输入的格式 比如 d
  • 内存条 udimm rdimm 等和 ECC 功能

    RDIMM registered DIMM Registered Dual In line Memory Module 带寄存器的双线内存模块 表示控制器输出的地址和控制信号经过Reg寄存后输出到DRAM芯片 控制器输出的时钟信号经过PLL
  • MySQL 查询语句大全

    目录 基础查询 直接查询 AS起别名 去重 复 查询 条件查询 算术运算符查询 逻辑运算符查询 正则表达式查询 模糊查询 范围查询 是否非空判断查询 排序查询 限制查询 分页查询 随机查询 分组查询 HAVING 高级查询 子查询 嵌套查询
  • vs显示行号

    工具 gt 选项 gt 文本编译器 gt 然后选择对应的编程语言 gt 在右侧 行号前的对勾打上确定即可
  • 【知识分享】Modbus通信协议详解

    一 协议 这里分两部分 Modbus和协议 首先什么是协议 百度解释下就是 意思是共同计议 协商 经过谈判 协商而制定的共同承认 共同遵守的文件 比如大学毕业找工作的时候 一般要签一份叫 三方协议 的 三方指自己 校方 企业 这份协议里规定
  • kali学习4——使用msfvenom制作exe木马

    使用msfvenom制作exe木马文件 1 msfvenom msfvenom是msfpayload msfencode的结合体 使用msfvenom制作木马的思路是 木马在目标机上执行后 向本机发送信息 而本机则需要开启监听状态 收到信息
  • 2021级新生个人训练赛第38场

    问题 A chicken 题目描述 小 x 非常喜欢小鸡翅 他得知 NSC 超市为了吸引顾客 举行了如下的活动 一旦有顾客在其他超市找到更便宜的小鸡翅 NSC 超市将免费送给顾客 1000g 小鸡翅 小 x 为了尽可能的省钱 走遍了各大超市