A
我的代码
#include<iostream>
#include<cstring>
#include<algorithm>
#define endl "\n"
#define IOS std::ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);
using namespace std;
typedef pair<int,int> PII;
const int N=100;
vector<PII> v;
int a[N],b[N];
void solve()
{
v.clear();
int n;
int t;
cin>>n>>t;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
cin>>b[i];
}
for(int i=0;i<n;i++)
{
int a1=a[i],b1=b[i];
v.push_back({a1,b1});
}
int idx=-1,ans=-1,time=0;
for(int i=0;i<n;i++)
{
if(v[i].first+time<=t)
{
if(v[i].second>ans)
{
idx=i+1;
ans=v[i].second;
}
}
time++;
}
cout<<idx<<endl;
}
int main()
{
IOS;
int T;
cin>>T;
while(T--)
{
solve();
}
return 0;
}
我是纯模拟,没怎么动脑结果费了好多时间~
正解应该是预处理t[i]
然后判断
某佬代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#define fi first
#define se second
#define endl "\n"
#define IOS std::ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);
using namespace std;
void solve()
{
int n,t,id=-2;
cin>>n>>t;
vector<int> a(n),b(n);
for(int i=0;i<n;i++)
{
cin>>a[i];
a[i]+=i;
}
for(int i=0;i<n;i++)
{
cin>>b[i];
}
for(int i=0;i<n;i++)
{
if(a[i]<=t &&(id==-2||b[id]<b[i])) id=i;
}
cout<<id+1<<endl;
}
int main()
{
IOS;
int T;
cin>>T;
while(T--)
{
solve();
}
return 0;
}
B
我的代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#define endl "\n"
#define IOS std::ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
const int N=2e5+10;
ll a1[N];
vector<ll> a,b;
vector<ll> c;
void solve()
{
int n;
cin>>n;
int b_cnt=0;
int a_cnt=0;
int flag_0=0;
a.clear();
b.clear();
c.clear();
for(int i=0;i<n;i++)
{
ll x;
cin>>x;
c.push_back(x);
if(x<0) b.push_back(x);
else if(x>=0) a.push_back(x);
if(x==0) flag_0=1;
}
ll ans=-1e9-10;
sort(a.begin(),a.end());
sort(b.begin(),b.end());
if(n==2) ans=c[0]*c[1];
else
{
if(a.size()>=2&&b.size()>=2)
{
ans=max(a[a.size()-2]*a[a.size()-1],b[0]*b[1]);
}
else if(a.size()<2&&b.size()>=2)
{
ans=b[0]*b[1];
}
else if(a.size()>=2&&b.size()<2)
{
ans=a[a.size()-2]*a[a.size()-1];
}
}
cout<<ans<<endl;
}
int main()
{
IOS;
int T;
cin>>T;
while(T--)
{
solve();
}
return 0;
}
某佬的代码:其实只要排个序然后 ans=max(a[0]*a[1],a[n-1]*a[n-2])
就好了~
#include<iostream>
#include<cstring>
#include<algorithm>
#define fi first
#define se second
#define endl "\n"
#define IOS std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
typedef long long ll;
using namespace std;
const int N=2e5+10;
ll a[N];
void solve()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
ll ans=max(a[0]*a[1],a[n-1]*a[n-2]);
cout<<ans<<endl;
}
int main()
{
IOS;
int T;
cin>>T;
while(T--)
{
solve();
}
return 0;
}
C
赛时:一开始想到了怎么做:s[i]=s[i-1]+2*n+1;
结果不知道怎么处理,刚刚看了别人的代码发现可以这样做
#include<iostream>
#include<cstring>
#include<algorithm>
#define endl "\n"
#define IOS std::ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
const int N=1e5+10;
struct node{
ll x,id;
ll ans;
}s[N];
bool cmp_id(node a,node b){
if(a.id!=b.id) return a.id<b.id;
}
bool cmp_x(node a,node b){
if(a.x!=b.x) return a.x<b.x;
}
int main()
{
IOS;
int T;
cin>>T;
for(int i=0;i<T;i++){
cin>>s[i].x;
s[i].id=i;
}
sort(s,s+T,cmp_x);
ll res=26,cnt=4;
for(int i=0;i<T;i++){
while(cnt<s[i].x){
res = res + 2 * (cnt + 1) + 1;
cnt++;
}
s[i].ans=res;
}
sort(s,s+T,cmp_id);
for(int i=0;i<T;i++){
cout<<s[i].ans<<endl;
}cout<<endl;
return 0;
}
这是O(1)的方法:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int main()
{
int T;
cin>>T;
while(T--)
{
ll n;
cin>>n;
ll ans=(n*(n-1))/2 + 1 + ((n-2)*(n-1))/2+ 4*n;
cout<<ans<<endl;
}
return 0;
}
D
思路:(其实是官方题解。。。)
k表示n在排列a中所占的位置,若k > 1
则bk = (bk-1 + n) % n = bk-1 。矛盾
故 n 只能处于排列 a 中的一个位置
分类讨论n为奇数还是偶数
当n为奇数:
队列a 中第一个元素为 n ,b1 = 0
若n为奇数 则bn = ( n * (n+1) / 2 ) % n 为 0 ,矛盾
故n为奇数无解(n==1除外)
当n为偶数:
则只有一种可能:
a = [n,1,n-2,3,n-4,5…n-1,2 ]
b = [0,1,n-1,2,n-2,3,n-3,…,n/2]
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#define endl "\n"
using namespace std;
void solve()
{
vector<int> res;
int n;
cin>>n;
if(n==1){
cout<<1<<endl;
return;
}
if(n&1){
cout<<-1<<endl;
return;
}
for(int i=0;i<n;i++){
if(i%2){
cout<<i<<' ';
}else{
cout<<n-i<<' ';
}
}
cout<<endl;
}
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T;
cin>>T;
while(T--){
solve();
}
return 0;
}
自我反思:我是**。