版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
总结:
小组2/1/1题 ,有待提升,近期目标3/3/3。
缺点:
- 英语阅读不行。
- 题目做得太少,不懂得动态开地图,被B题卡住。
- 没有考虑特殊情况,C题的边界及特殊情况都没有处理好。
- 知识点薄弱(博弈论)。
A - Forgetting Things
思路:阅读题目,每次消去奇数位,所以只要输出偶数2*x即可。
#include<bits/stdc++.h>
#define ll long long
#define R register int
#define inf 0x3f3f3f3f
#define mod 1000000007;
using namespace std;
inline ll read(){
ll s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
void put1(){ puts("YES") ;}
void put2(){ puts("NO") ;}
const int manx=5e4+5;;
int a[26];
int main()
{
ll n,m;
n=read(),m=read();
if(n==9&&m==1) cout<<n<<" "<<m*10<<endl;
else if(n==m) cout<<n*10<<" "<<m*10+1<<endl;
else if(m-n==1) cout<<n*10+9<<" "<<m*10<<endl;
else puts("-1");
return 0;
}
B1 - TV Subscriptions (Easy Version)
思路:满足涂黑十字架的最小格数,因为不会动态开地图的原因,这题没过,懵了,也只是差开地图这一关,模拟即可。
#include<bits/stdc++.h>
#define ll long long
#define R register int
#define inf 0x3f3f3f3f
#define mod 1000000007;
using namespace std;
inline ll read(){
ll s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
void put1(){ puts("Yes") ;}
void put2(){ puts("No") ;}
const int manx=2e5+5;;
ll a[manx];
map<ll,ll>b;
int main()
{
ll q;
q=read();
while(q--)
{
ll n,k,d;
n=read(),k=read(),d=read();
b.clear();
ll ans=0,res=0;
for(int i=1;i<=n;i++)
a[i]=read();
set<ll>q;
for(int i=1;i<=d;i++)
q.insert(a[i]),b[a[i]]++;
ans=q.size();
for(int i=d+1;i<=n;i++)
{
q.insert(a[i]);
b[a[i]]++;
b[a[i-d]]--;
if(!b[a[i-d]]) q.erase(a[i-d]);
ans=min(ans,(ll)q.size());
}
cout<<ans<<endl;
}
return 0;
}
B2 - TV Subscriptions (Hard Version)
思路:数组标记t串字母数量,然后双指针遍历s和p,最后要判断s串的长度是否和对应指针相等(下午少了这个判断)。
#include<bits/stdc++.h>
#define ll long long
#define R register int
#define inf 0x3f3f3f3f
#define mod 1000000007;
using namespace std;
inline ll read(){
ll s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
void put1(){ puts("Yes") ;}
void put2(){ puts("No") ;}
const int manx=2e5+5;;
ll a[manx];
map<ll,ll>b;
int main()
{
ll q;
q=read();
while(q--)
{
ll n,k,d;
n=read(),k=read(),d=read();
b.clear();
ll ans=0,res=0;
for(int i=1;i<=n;i++)
a[i]=read();
set<ll>q;
for(int i=1;i<=d;i++)
q.insert(a[i]),b[a[i]]++;
ans=q.size();
for(int i=d+1;i<=n;i++)
{
q.insert(a[i]);
b[a[i]]++;
b[a[i-d]]--;
if(!b[a[i-d]]) q.erase(a[i-d]);
ans=min(ans,(ll)q.size());
}
cout<<ans<<endl;
}
return 0;
}