# SDUT 2018 Winter Individual Contest - 5

A:

code:

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<string.h>
#include<vector>
using namespace std;
int main()
{
string  u;
int t;
cin>>t;
int sum = 2;
while(t--)
{
cin>>u;
for(int i=0;i<u.size();i++)
{
if(u[i]=='+')
{
sum++;
break;
}
}
sum++;

}if(sum==13)printf("%d\n",(sum+1)*100);
else printf("%d\n",sum*100);
return 0;
}

C:

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<math.h>
using namespace std;
const int maxn  = 99999;
int factor(long long  n,long long a[maxn],long long b[maxn],int &tot)
{
long long temp,i,now;
temp = (long long )((double)sqrt(n)+1);
tot =0 ;
now =n;
int sum2 = 0;
for(i=2; i<=temp; i++)
{
if(sum2>=20)break;
if(now%i==0)
{
a[++tot] = i;
b[tot]  =0;
while(now%i==0)
{
++b[tot];
now/=i;
sum2++;
}
}
if(sum2>=20)break;

if((long long)pow(i+1,20-sum2)>now)
return false;
}
if(now!=1)
{
a[++tot] = now;
b[tot] = 1;
sum2++;
}
if(sum2>20)return false;
else return sum2;
}
int main()
{
long long n;
int tot =0;
cin>>n;
long long a[99999];
long long  b[99999];
int ans =  factor(n,a,b,tot);
// cout<<ans<<endl;
if(ans==20)printf("Yes\n");
else printf("No\n");
//    for(int i=0; i<=tot; i++)
//    {
//        printf("%d ",a[i]);
//    }
//    printf("\n");
//    for(int i=0; i<=tot; i++)
//    {
//        printf("%d ",b[i]);
//    }
//    printf("\n");
return 0;
}


D：dfs+博弈

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int n;
char a[600000],b[600000];
int dfs(int n,int state,char *a,char *b)
{
if(n%2==1)
{
int f = 0;
for(int i=0; i<n; i++)
{
if((a[i]=='A')|(b[i]=='A'))
{
if(f==1)f++;
else f =3;
}
if ( (a[i]=='B')|(b[i]=='B'))
{
if(f==3)f--;
else f = 1;
}
if(f==2)break;
}
return f;
}
int t1 = dfs(n/2,1-state,a,a+n/2);
int t2 = dfs(n/2,1-state,b,b+n/2);
if(state) return max(t1,t2);
else return min(t1,t2);
}
int main()
{
cin>>n;
cin>>a>>b;
int f = dfs(n,1,a,b);
if(f==2)
printf("Draw\n");
else if(f==1)
printf("Bob\n");
else printf("Alice\n");
return 0;
}

E：两个人从同一起点出发，沿圆形跑道运动，过程中可能会有停顿，问两人在过程中相遇几次？

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<string.h>
#include<vector>
using namespace std;
const int maxn  = 99999;
int main()
{
long long l,t,va,vb,n, tti, ti, di;
long long ans = 0, a = 0, b = 0, rt = 0, dt;
scanf("%lld%lld%lld%lld%lld",&l,&t,&va,&vb,&n);
for(int i = 0; i < n; i++)
{
scanf("%lld%lld%lld",&tti,&ti,&di);
dt = ti - rt;
a += va * dt;
b += vb * dt;
if(tti == 1)
{
b += vb * di;
}
else
{
a += va * di;
}
rt = ti + di;
}
dt = t - rt;
a += va * dt;
b += vb * dt;
printf("%lld\n",(a+b)/l);

return 0;
}


G：bitset 巧妙应用

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
bitset<1100>a[5002],b[5002];
int main()
{
bitset<1100>o;
int n,m;
cin>>n>>m;
for(int i=1; i<=m; i++)
cin>>a[i]>>b[i];
cin>>o;
while(1)
{
int f = 1;
for(int i=1; i<=m; i++)
{
if(    (o&a[i])==a[i] &&(o&b[i]) !=b[i])
{
o|=b[i];
f = 0;
}
}
if(f)break;
}
string ans = o.to_string();
cout<<string(ans.end()-n,ans.end())<<endl;
return 0;
}
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<string.h>
#include<vector>
#include<set>
using namespace std;
const int maxn  = 99999;
int a[2000],b[2000];
char yy[2000];
set<int>o[4000],o2[4000];
int main()
{
set<int>have;
int n,m,u;
cin>>n>>m;

set<int>::iterator it,its;
for(int i=1; i<=m; i++)
{

scanf("%s",yy);
for(int j=0; j<n; j++)
{

if(yy[j]=='1')
o[i].insert(j+1);
}
//        for(it=o[i].begin(); it!=o[i].end(); it++)
//        {
//            printf("%d",*it);
//        }
//        printf("\n");
scanf("%s",yy);
for(int j=0; j<n; j++)
{
if(yy[j]=='1')
o2[i].insert(j+1);
}
//        for(it=o2[i].begin(); it!=o2[i].end(); it++)
//        {
//            printf("%d",*it);
//        }
//        printf("\n");
getchar();
}

scanf("%s",yy);
for(int i=0; i<n; i++)
{

if(yy[i]=='1')
have.insert(i+1);
}
//    for(it=have.begin(); it!=have.end(); it++)
//    {
//        printf("%d ",*it);
//    }
//    printf("\n");
vector<int>temp;
set<int>tt;
int book2[4002]= {0};
int sum =0;

while(1)
{
//        sum++;
//        if(sum>10)break;
int f = 1;
for(int i=1; i<=m; i++)
{
if(!book2[i])
{    temp.clear();
set_intersection(have.begin(),have.end(),o[i].begin(),o[i].end(),back_inserter(temp));
//                cout<<temp.size()<<endl;
//                for(int u =0; u<temp.size(); u++)
//                {
//                    printf("%d ",temp[u]);
//                }
//                printf("\n");
tt.clear();
for(int i=0; i<temp.size(); i++)
tt.insert(temp[i]);
if(tt==o[i])
{
f = 0;
book2[i] = 1;
temp.clear();
set_union(have.begin(),have.end(),o2[i].begin(),o2[i].end(),back_inserter(temp));
//                    for(int u =0; u<temp.size(); u++)
//                    {
//                        printf("%d ",temp[u]);
//                    }
//                    printf("%\n");
have.clear();
for(int i=0; i<temp.size(); i++)
have.insert(temp[i]);
}
}
}
if(f)break;
}
int book[2000]= {0};
for(it=have.begin(); it!=have.end(); it++)
{
book[*it]=1;
}
for(int i=1; i<=n; i++)
{
printf("%d",book[i]);
}
printf("\n");
return 0;
}



©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客