https://codeforces.com/contest/1669 鸽了很长时间,才补。 这场是手速赛。AK了。
A. Division?【语法题】
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int t; cin>>t;
while(t--)
{
int x; cin>>x;
if(x>=1900) puts("Division 1");
else if(x>=1600&&x<1900) puts("Division 2");
else if(x>=1400&&x<1600) puts("Division 3");
else if(x<1400) puts("Division 4");
}
return 0;
}
B. Triple【语法题】
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int t; cin>>t;
while(t--)
{
int n,x; cin>>n;
bool flag=0;
map<int,int>mp;
for(int i=1;i<=n;i++) cin>>x,mp[x]++;
for(auto i=mp.begin();i!=mp.end();i++)
{
if(i->second>=3)
{
flag=1;
cout<<i->first<<endl;
break;
}
}
if(!flag) puts("-1");
}
return 0;
}
C. Odd/Even Increments【思维】
题目每次都是选奇数下标或偶数下标整体加1。 故奇数下标的数整体都是同一种奇偶性。故偶数下标的数整体都是同一种奇偶性。
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int t; cin>>t;
while(t--)
{
int n; cin>>n;
map<int,int>mp1,mp2;
for(int i=1;i<=n;i++)
{
int x; cin>>x;
if(i&1) mp1[x&1]++;
else mp2[x&1]++;
}
if(mp1.size()==1&&mp2.size()==1) puts("YES");
else puts("NO");
}
return 0;
}
D. Colorful Stamp【思维】
你会发现,‘W’-‘W’ 之间如果有其他颜色。则’R’和‘B’两种颜色必有。
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int t; cin>>t;
while(t--)
{
int n; cin>>n;
string s; cin>>s;
bool flag=1;
for(int i=0;i<s.size();i++)
{
if(s[i]!='W')
{
int j=i;
map<char,int>mp;
while(j<s.size()&&s[j]!='W') mp[s[j]]++,j++;
if(mp.size()==1) flag=0;
i=j;
}
}
if(flag) puts("YES");
else puts("NO");
}
return 0;
}
E. 2-Letter Strings
#include<bits/stdc++.h>
using namespace std;
const int N=1e6*2+10;
typedef long long int LL;
string s[N];
int main(void)
{
int t; cin>>t;
while(t--)
{
int n; cin>>n;
for(int i=0;i<n;i++) cin>>s[i];
LL cnt[26][26]={0},sum=0;
for(int i=0;i<n;i++)
{
int x=s[i][0]-'a',y=s[i][1]-'a';
for(int j=0;j<26;j++)
if(j!=y) sum+=cnt[x][j];
for(int j=0;j<26;j++)
if(j!=x) sum+=cnt[j][y];
cnt[x][y]++;
}
cout<<sum<<endl;
}
return 0;
}
F. Eating Candies【双指针 / 二分】
#include<bits/stdc++.h>
using namespace std;
const int N=1e5*2+10;
int n,m,t,a[N],b[N],s[N];
int main(void)
{
cin>>t;
while(t--)
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i],s[i]=0;
for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i];
for(int i=1;i<=n;i++) b[i]=b[i-1]+a[n-i+1];
int ans=0;
for(int i=1;i<=n;i++)
{
int temp=s[i];
int index=lower_bound(b+1,b+n+1,s[i])-b;
if(b[index]==temp && i+index<=n)
ans=max(ans,i+index);
}
cout<<ans<<endl;
}
return 0;
}
G. Fall Down【模拟】
模拟。
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
int n,m,t;
string s[50];
void solve(int x,int y)
{
queue<PII>q; q.push({x,y});
while(q.size())
{
auto temp=q.front(); q.pop();
x=temp.first,y=temp.second;
int tempx=x+1;
if(tempx>=n) continue;
if(s[tempx][y]=='.')
{
s[x][y]='.';
s[tempx][y]='*';
q.push({tempx,y});
}
}
}
int main(void)
{
cin>>t;
while(t--)
{
cin>>n>>m;
for(int i=0;i<n;i++) cin>>s[i];
for(int i=n-1;i>=0;i--)
for(int j=0;j<m;j++)
if(s[i][j]=='*') solve(i,j);
for(int i=0;i<n;i++) cout<<s[i]<<endl;
puts("");
}
return 0;
}
H. Maximal AND【贪心】
贪心,从高到低位贪
#include<bits/stdc++.h>
using namespace std;
const int N=1e5*2+10;
int a[N];
int main(void)
{
int t; cin>>t;
while(t--)
{
int n,k; cin>>n>>k;
int cnt[35]={0};
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++)
for(int j=0;j<=30;j++)
if(a[i]>>j&1) cnt[j]++;
long long int ans=0;
for(int i=30;i>=0;i--)
{
if(cnt[i]<n&&cnt[i]+k>=n)
k=k-(n-cnt[i]),cnt[i]=n;
}
for(int i=0;i<=30;i++)
if(cnt[i]==n) ans+=1<<i;
cout<<ans<<endl;
}
return 0;
}
|