A - 3.14 (atcoder.jp)
AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<set>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll;
string s="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679";
int n;
void solve()
{
cin>>n;
for(int i=0;i<n+2;i++) cout<<s[i];
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
// cin>>t;
while(t--) {
solve();
}
return 0;
}
B - Roulette (atcoder.jp)
AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<set>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll;
const int N=110;
int c[N];
int a[N][N];
int n;
void solve()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>c[i];
for(int j=1;j<=c[i];j++){
cin>>a[i][j];
}
}
int x;
cin>>x;
set<int>s,sx;
for(int i=1;i<=n;i++){
for(int j=1;j<=c[i];j++){
if(a[i][j]==x) s.insert(i);
}
}
int minn=100;
for(auto v:s){
if(c[v]<minn) minn=c[v];
}
for(auto v:s){
if(c[v]==minn) sx.insert(v);
}
cout<<sx.size()<<endl;
for(auto v:sx) cout<<v<<' ';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
// cin>>t;
while(t--) {
solve();
}
return 0;
}
C - Rotate Colored Subsequence (atcoder.jp)
AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll;
const int N=2e5+10;
int n,m;
string s;
int c[N];
void solve()
{
cin>>n>>m;
cin>>s;
for(int i=0;i<n;i++) cin>>c[i];
vector<vector<int>>e(m+1);
for(int i=0;i<n;i++) e[c[i]].push_back(i);
for(int i=1;i<=m;i++){
char temp=s[e[i][e[i].size()-1]];
for(int j=e[i].size()-1;j>0;j--){
s[e[i][j]]=s[e[i][j-1]];
}
s[e[i][0]]=temp;
}
cout<<s<<endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
// cin>>t;
while(t--) {
solve();
}
return 0;
}
D - LOWER (atcoder.jp)
后面的操作是有效的,对于转大小写,只要找到最后一次转大小写的操作是哪一次就行了,然后除了该次操作后面操作的位置不用考虑,其它位置都转成大写或者小写
先单独处理t为1时的位置,然后最后没有处理过的位置全部转化成大写或小写
AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll;
const int N=5e5+10;
int t[N],x[N];
char c[N];
bool ok[N];
int n;
void solve() {
cin>>n;
string s;
cin>>s;
int q;
cin>>q;
for(int i=1; i<=q; i++) cin>>t[i]>>x[i]>>c[i];
int flag=0;
int w=-1;
for(int i=q; i>=1; i--) {
if(t[i]!=1) {
w=i;
if(t[i]==2) flag=1;
else flag=2;
break;
}
}
for(int i=q; i>=1; i--) {
if(ok[x[i]-1]||t[i]!=1) continue;
s[x[i]-1]=c[i];
ok[x[i]-1]=true;
if(i<w) {
if(flag==1) {
if(s[x[i]-1]>='A'&&s[x[i]-1]<='Z') s[x[i]-1]=s[x[i]-1]-'A'+'a';
} else if(flag==2) {
if(s[x[i]-1]>='a'&&s[x[i]-1]<='z') s[x[i]-1]=s[x[i]-1]-'a'+'A';
}
}
}
for(int i=0; i<n; i++) {
if(ok[i]) cout<<s[i];
else {
if(w==-1) cout<<s[i];
else {
if(flag==1) {
if(s[i]>='A'&&s[i]<='Z') cout<<(char)(s[i]-'A'+'a');
else cout<<s[i];
} else if(flag==2) {
if(s[i]>='a'&&s[i]<='z') cout<<(char)(s[i]-'a'+'A');
else cout<<s[i];
}
}
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
// cin>>t;
while(t--) {
solve();
}
return 0;
}