Kattis
A - Basketball One-on-One
答案:
#include <iostream>
#include<bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
const int mod = 10;
const int N = 1e5 + 10;
const int M = 1111;
using namespace std;
void solve(){
ll sum1=0;
ll sum2=0;
string s;
cin>>s;
ll len=s.length();
for(ll i=0;i<len;i+=2){
if(s[i]=='A') sum1+=s[i+1]-'0';
if(s[i]=='B') sum2+=s[i+1]-'0';
if(max(sum1,sum2)>=11&&abs(sum1-sum2)>=2){
if(sum1>sum2) puts("A");
else puts("B");
break;
}
}
}
int main()
{
solve();
return 0;
}
C - Convoy
答案:
#include <iostream>
#include<bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
#define R_Inf 1e10
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define pb push_back
const int mod = 7;
const int N = 2e4 + 10;
const int M = 11;
using namespace std;
int dp[N];
int n,k;
ll l,r;
ll judge(ll mid){
ll sum=0;
ll peo=0;
for(ll i=1;i<=n;i++){
if(sum>=k) break;
if(dp[i]<=mid){
peo+=4;
peo+=(mid-dp[i])/(2*dp[i])*4;
sum++;
}
}
if(peo>=n-sum) return true;
return false;
}
void erfen(){
l=1;
r=R_Inf;
ll mid;
while(l<r){
mid=(l+r)>>1;
if(judge(mid)) r=mid;
else l=mid+1;
}
cout<<l<<endl;
}
void solve(){
cin>>n>>k;
for(ll i=1;i<=n;i++){
cin>>dp[i];
}
sort(dp+1,dp+1+n);
erfen();
}
int main()
{
solve();
return 0;
}
F - Dragon Ball I
答案:
#include <iostream>
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define pb push_back
const int mod = 7;
const int N = 2e5 + 10;
const int M = 11;
using namespace std;
struct node{
ll next;
ll w;
};
ll n,m;
ll way[M];
ll vis[M];
ll dis[M][N];
vector<node> dp[N];
void _clear(ll key){
for(ll i=1;i<=n;i++){
dis[key][i]=INF;
}
}
void Dijkstra(ll key,ll pos){
_clear(key);
priority_queue<PLL,vector<PLL>,greater<PLL> >q;
dis[key][pos]=0;
q.push(PLL(0,pos));
while(!q.empty()){
PLL p=q.top();
q.pop();
ll x=p.first;
ll y=p.second;
if(x>dis[key][y]) continue;
for(ull i=0;i<(ll)dp[y].size();i++){
node np=dp[y][i];
if(dis[key][np.next]>dis[key][y]+np.w){
dis[key][np.next]=dis[key][y]+np.w;
q.push(PLL(dis[key][np.next],np.next));
}
}
}
}
void init(){
for(ll i=0;i<8;i++){
vis[i]=i;
}
}
void add_edge(int u,int v,int t){
node np;
np.next=v;
np.w=t;
dp[u].pb(np);
}
void solve(){
cin>>n>>m;
for(ll i=1;i<=m;i++){
ll u,v,t;
cin>>u>>v>>t;
//node np;
add_edge(u,v,t);
add_edge(v,u,t);
}
for(ll i=1;i<=7;i++){
cin>>way[i];
Dijkstra(i,way[i]);
}
ll ans=INF;
init();
ll dist;
do{
dist=dis[vis[7]][1];
for(ll i=2;i<8;i++){
dist+=dis[vis[i-1]][way[vis[i]]];
}
ans=min(dist,ans);
}while(next_permutation(vis+1,vis+8));
if(ans==INF) puts("-1");
else cout<<ans<<endl;
}
int main()
{
solve();
return 0;
}
H - Farming Mars
答案:
#include <iostream>
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define pb push_back
const int mod = 7;
const int N = 1e5 + 10;
const int M = 111;
using namespace std;
int n,m;
char s[M];
map<int,int>mp;
int pos;
int vis[N];
int num[N];
int dp[N];
void solve(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>s;
int len=strlen(s);
int key=0;
for(int j=0;j<len;j++){
if(s[j]!='.') key=key*10+s[j]-'0';
}
if(!mp[key]){
mp[key]=++pos;
vis[pos]=key;
}
num[i]=mp[key];
}
int l,r;
for(int i=0;i<m;i++){
cin>>l>>r;
int tot=(r-l+1)/2+1;
bool flag=0;
for(int j=l;j<=r;j++){
dp[num[j]]++;
if(dp[num[j]]>=tot) flag=1;
}
if(flag) puts("usable");
else puts("unusable");
for(int j=l;j<=r;j++){
dp[num[j]]--;
}
}
}
int main()
{
solve();
return 0;
}
I - Soft Passwords
答案:
#include <iostream>
#include<bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
const int mod = 10;
const int N = 1e5 + 10;
const int M = 1111;
using namespace std;
void solve(){
string s1;
string s2;
cin>>s1>>s2;
int len1=s1.length();
int len2=s2.length();
bool flag=0;
bool f1=0;
bool f2=0;
if(len1==len2){
if(s1==s2) flag=1;
if(flag) puts("Yes");
else{
for(int i=0;i<len1;i++){
if(s1[i]>'9'&&s2[i]>'9'){
if(abs(s1[i]-s2[i])==abs('a'-'A')) continue;
else f1=1;
}
else{
if((s1[i]>='0'&&s1[i]<='9')&&(s2[i]>='0'&&s2[i]<='9')){
if(s1[i]==s2[i]) continue;
else f1=1;
}
else f1=1;
}
}
if(!f1) puts("Yes");
else puts("No");
}
}
else if(len1==len2+1){
if(s1[0]!=s2[0]){
if(s1[0]>='0'&&s1[0]<='9'){
for(int i=1;i<len1;i++){
if(s1[i]!=s2[i-1]) f2=1;
}
if(!f2) puts("Yes");
else puts("No");
}
else puts("No");
}
else{
if(s1[len1-1]>='0'&&s1[len1-1]<='9'){
for(int i=0;i<len2;i++){
if(s1[i]!=s2[i]) f2=1;
}
if(!f2) puts("Yes");
else puts("No");
}
else puts("No");
}
}
else puts("No");
}
int main()
{
solve();
return 0;
}
L - Umm Code
答案:
#include <iostream>
#include<bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
const int mod = 7;
const int N = 1e5 + 10;
const int M = 11;
using namespace std;
bool judge(string s){
int len=s.length();
for(int i=0;i<len;i++){
if(s[i]>='A'&&s[i]<='Z') return false;
if(s[i]>='0'&&s[i]<='9') return false;
if(s[i]!='u'&&s[i]!='m'&&s[i]>='a'&&s[i]<='z') return false;
}
return true;
}
int vis[M];
void solve(){
string s;
string str;
while(cin>>s){
if(judge(s)) str+=s;
}
vis[0]=1;
for(int i=1;i<9;i++){
vis[i]=2*vis[i-1];
}
int len=str.length();
int pos=6;
char key=0;
for(int i=0;i<len;i++){
if(str[i]=='u') key+=vis[pos];
else if(str[i]!='m') continue;
if(!pos) {
cout<<key;
key=0;
}
pos=(pos+6)%mod;
}
cout<<endl;
}
int main()
{
solve();
return 0;
}