Round 99
思路:我們之間去用字符串去統計即可,輸入一個字符串,看相鄰有沒有99即可
#include<bits/stdc++.h>
using namespace std;
#define int long long
string s;
signed main()
{cin>>s;int n=s.size();for(int i=1;i<n;i++){if(s[i-1]=='9'&&s[i]=='9'){cout<<"YES\n";return 0;}}cout<<"NO\n";return 0;
}
缺陷型電腦
思路:怎么說呢?其實就是去看輸入的字符串里面最大的ascii碼值是多少,輸出這個最大的碼值即可
我們之間用字符減去‘a’+97即可
找到最大值
#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n;
string s;
void solve()
{cin>>n;cin>>s;int ans=0;for(char c:s){ans=max(ans,c-'a'+97LL);}cout<<ans<<"\n";
}
signed main()
{cin>>t;while(t--){solve();}return 0;
}
小苯的洞數構造
思路:基本上最高位用4或者8,后面全部用8即可,如果是0,就輸出1,否則就是按照洞數去構造
4,8,48,88,488,888這種序列即可
?
#include<bits/stdc++.h>
using namespace std;
#define int long longint k;
void solve()
{cin>>k;int cnt8=k/2;int cnt4=k%2;for(int i=1;i<=cnt4;i++)cout<<"4";for(int i=1;i<=cnt8;i++)cout<<"8";cout<<"\n";
}
signed main()
{int t;cin>>t;while(t--){solve();}return 0;
}
前綴和
思路:其實這題只有在奇偶性變換的時候才會用到計數,否則都是偶數,找到規律直接寫即可
那么什么時候回出現奇偶性變換呢?就是當p%x==0的時候
#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int x,p;
void solve()
{cin>>x>>p;if(p%x==0){cout<<(p/x)*2-1<<"\n";}else{cout<<(p-(p/x))*2<<"\n";}
}
signed main()
{cin>>t;while(t--){solve();}return 0;
}
小宇
思路:其實仔細想想這道題,其實會將整個序列分成兩部分,左部分,會將當前位置的值都變成下標,右半部分就是不需要變化的,我們只需要枚舉從哪個位置開始進行右半部分即可,我們可以知道右半部分的值一定是ai>=i的,并且ai<ai+1的,我們只需要去統計左半部分的數的種類,就是最后的答案了
#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n;
int a[200005];
void solve() {int n;cin >> n;vector<int> a(n);map<int, int> cnt, mp;for (int i = 0; i < n; i++) {cin >> a[i];cnt[a[i]]++;}int c = 1E9;for (int i = n - 1; i >= 0; i--) {if (a[i] <= i || a[i] >= c || cnt[a[i]] > 1 || mp.count(a[i])) {mp[a[i]] = 1, c = i + 1;} else {c = a[i];}}cout << mp.size() << '\n';
}
signed main()
{cin>>t;while(t--)solve();return 0;
}
漢堡豬豬分糖果
思路:將n個糖果分到m個人手上,算其與的值,然后想讓這個值最大,那么我們知道只有當m個人在這一位都是1的時候,與出來才是1,因此我們可以從最高位開始枚舉,也就是第31位,判斷剩下的n是否大于等于m*(1<<bit)如果大于等于,就可以直接讓這一位全部變成1
否則 我們要去看剩下的是否能讓當前位后面的全部變成1,如果不能,就直接跳過,如果可以就在這一位補充k個人有即可,我們可以列一個式子
n-k*(1<<bit)<=m*(1<<bit)-m
不等式的左邊表示剩下的總的個數減去k個有糖果的
不等式的右邊表示將剩下的位置填滿所需的代價,這個是一定滿足的
然后最后算k向上取整即可
#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,m;
void solve()
{cin>>n>>m;int ans=0;for(int i=31;i>=0;i--){int v=1LL<<i;int cost=m*v;if(n>= m*(1LL<<i)){n-=m*(1LL<<i);ans+=(1LL<<i);}else{cost-=m;//后面全1的代價if(n<=cost)continue;int k=(n-cost+v-1)/v;n-=k*v;}}cout<<ans<<"\n";
}
signed main()
{cin>>t;while(t--){solve();}return 0;
}