目錄
A.Peak
【題意】
給出的數組的元素大小,是否符合只有一個先上升在下降的趨勢
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <stack>
#include<list>
#include <iostream>
#include <queue>
using namespace std;
const int maxn = 1e5+ 10;
typedef long long ll;
ll a[maxn];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
//memset(a,0,sizeof(a));
int n,peak = 0,no = 0;
scanf("%d",&n);
for(int i = 1 ;i <= n;i++)
{
a[i] = 0;
scanf("%lld",&a[i]);
}
a[0] = a[n+1] = -1;
for(int i = 1;i <= n+1;i++)
{
if(a[i] < a[i-1])//找到數字開始下降的點,試過了這裏寫不寫=都對
{
peak = i - 1;
if (peak == n || peak == 1)
no = 1;
break;
}
}
for(int i = peak + 1;i <= n;i++)//以該點爲peak,詢問是否滿足條件
{
if(a[i] >= a[i-1])//後一項嚴格小於前一項,必須有等號
{
no = 1;
break;
}
}
if(no)
puts("No");
else
puts("Yes");
}
return 0;
}
B - King of Karaoke
注意最大maxn的取值範圍
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <stack>
#include<list>
#include <iostream>
#include <queue>
#include <map>
using namespace std;
const int maxn = 2e5+ 10;
typedef long long ll;
int a[maxn],p[maxn],ne[maxn];
int cmp(int a,int b)
{
return a > b;
}
int main()
{
ios::sync_with_stdio(false);
int t,x;
cin>>t;
while(t--)
{
memset(a,0,sizeof(a));
memset(p,0,sizeof(p));
memset(ne,0,sizeof(ne));
int n,fp = 0,fn = 0,ans;
cin>>n;
for(int i = 0;i < n;i++)
cin>>a[i];
for(int i = 0;i < n;i++)
{
cin>>x;
ll e = x - a[i];//注意這裏maxn可以達到2e5!!!
if(e >= 0)
p[e] ++;
else
ne[-e] ++;
}
sort(p,p+maxn,cmp);
sort(ne,ne+maxn,cmp);
ans = max(p[0],ne[0]);
cout<<ans<<endl;
}
return 0;
}
CDEFGHI unsolved
J - CONTINUE...?
好煩一道題,還沒弄明白
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <stack>
#include<list>
#include <iostream>
#include <queue>
#include <map>
using namespace std;
const int maxn = 1e6+10;
typedef long long ll;
int ans[maxn];
int main()
{
//ios::sync_with_stdio(false);
int t;
scanf("%d",&t);
while(t--)
{
int n,sum1 = 0,sum2 = 0,sum = 0;
string str;
scanf("%d",&n);
for(int i = 0;i < n;i++)
ans[i] = 0;
cin>>str;
sum = (1+n)*n/2;
for(int i = 0;i < n/2;i++)
{
if(i % 2 == 0)
{
ans[i] = 0;
sum1 += i+1;
}
else
{
ans[i] = 1;
sum2 += i+1;
}
}
for(int i = n/2;i < n;i++)
{
if(i % 2 == 0)
{
ans[i] = 1;
sum2 += i+1;
}
else
{
ans[i] = 0;
sum1 += i+1;
}
}
if(sum1 != sum2)
{
puts("-1");
continue;
}
for(int i = 0;i < n;i++)
{
if(str[i] == '1')//boy
{
if(ans[i])
printf("4");
else
printf("3");
}
else
{
if(ans[i])
printf("2");
else
printf("1");
}
}
puts("");
}
return 0;
}
K
L - Doki Doki Literature Club
記得用long long。。我太蠢了pair裏忘記改ll了。。。
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <stack>
#include<list>
#include <iostream>
#include <queue>
#include <map>
using namespace std;
const int maxn = 150;
typedef long long ll;
typedef pair<string,ll> P;
P p[maxn];
bool cmp(P a,P b)
{
if(a.second != b.second)
{
if(a.second > b.second)
return true;
}
else
{
if(a.first < b.first)
return true;
}
return false;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n,m;
ll sum=0;
cin>>n>>m;
for(int i = 1;i <= n;i++)
{
string str;
ll num;
cin>>str>>num;
p[i] = make_pair(str,num);
}
sort(p+1,p+n+1,cmp);
for(int i = 1;i <= m;i++)
sum += (m - i + 1) * p[i].second;
cout<<sum;
for(int i = 1;i <= m;i++)
cout<<" "<<p[i].first;
puts("");
}
return 0;
}
M - Lucky 7
水題,看清輸出的Yes和No的大小寫
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <stack>
#include<list>
#include <iostream>
#include <queue>
using namespace std;
const int maxn = 1e5+ 10;
typedef long long ll;
int main()
{
int t;
cin>>t;
while(t--)
{
int a[105];
int n,m,yes = 0;
cin>>n>>m;
for(int i = 0;i < n;i++)
cin>>a[i];
for(int i = 0;i < n;i++)
{
if((a[i] + m) % 7 == 0)
{
yes = 1;
break;
}
}
if(yes)
puts("Yes");
else
puts("No");
}
return 0;
}