A. TubeTube Feed
签到题
思路
往后走,每次减一,记录当前所能得到最大的bi
完整代码
#include<bits/stdc++.h>
using namespace std ;
#define ll long long
inline ll read(){
ll s=0 ; char g=getchar() ; while( g>'9'||g<'0')g=getchar() ;
while( g>='0'&&g<='9')s=s*10+g-'0',g=getchar() ; return s ;
}
ll a[51] , b[51] ;
void solve(){
ll n = read() , k = read() ;
for( int i = 1 ; i <= n ; ++i )a[i] = read() ;
for( int i = 1 ; i <= n ; ++i )b[i] = read() ;
ll ans = -1 , mans = 0 ;
for( int i = 1 ; i <= n ; ++i ){
if( k >= a[i] && b[i] > mans )mans = b[i] , ans = i ;
k-- ;
}
cout<<ans<<endl ;
}
int main(){
ll q = read() ;
while( q-- ){
solve() ;
}
return 0 ;
}
B. Karina and Array
ssw:笑死,搞忘初值不能为0了
思路
通常来说,记录数列中的最大值和次大值,相乘即答案
但存在负值,所以还要记录最小值和次小值
二者取max
注意下初始值的问题,不要赋值为0
完整代码
#include<bits/stdc++.h>
using namespace std ;
#define ll long long
void solve(){
ll n ; cin>> n ;
ll max1 = -1000000001 , max2 = -1000000001 , min1 = 1000000001 , min2 = 1000000001 ;
for( int i = 1 ; i <= n ; ++i ){
ll x ; cin>>x ;
if( x >= max1 ){
max2 = max1 ; max1 = x ;
}
else if( x >= max2 )max2 = x ;
if( x <= min1 ){
min2 = min1 ; min1 = x ;
}
else if( x <= min2 )min2 = x ;
}
cout<<max( max1*max2 , min1*min2 )<<endl ;
}
int main(){
ll q ; cin>>q ;
while( q-- ){
solve() ;
}
return 0 ;
}
C. Bun Lover
XXX:这不都是一眼题吗?
思路
主要思路
找规律嘛, f[n+1] = f[n]+2*n+1
然后拆开递推式即可f[n]=2+2n+n^2
代码
void solve(){
ll n ; cin>> n ;
cout<<2ll+2ll*n+n*n<<endl ;
}
D. Super-Permutation
fxs:看6就行
橘子熊:我猜的,但对了
思路
主要思路
首先明确我们是要利用前缀和取模后再凑出一组 0 到 n-1
然后看看样例取模,就能找到规律 0 5 1 4 2 3
反向推出数列即可
代码
void solve(){
int n ; cin>>n ;
if( n == 1 )cout<<1<<endl ;
else if ( n%2 )cout<<-1<<endl ;
else {
for( int i = 0 ; i < n ; ++i){
if( i%2 )cout<<n-i<<" " ;
else if( i==0 )cout<<n<<" " ;
else cout<<i<<" " ;
}
cout<<endl ;
}
}
标签:1000000001,ll,max1,Codeforces,long,max2,solve,867,Div
From: https://www.cnblogs.com/ssw02/p/17352918.html