T1:
#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=200+10;
struct person{
string name;
int is_[maxn],not_[maxn],id,today,is_self,not_self,is,no;
person()
{
name.resize(0);is_self=not_self=today=is=no=0;
memset(is_,0,sizeof(is_));
memset(not_,0,sizeof(not_));
}
}p[maxn];
map<string,int>id;
int n,m,Q;
string name[40];
char input(char &ch){ch=getchar();return ch;}
int check(string s)
{
if(s=="Monday.") return 1;
if(s=="Tuesday.") return 2;
if(s=="Wednesday.")return 3;
if(s=="Thursday.") return 4;
if(s=="Friday.") return 5;
if(s=="Saturday.") return 6;
if(s=="Sunday.") return 7;
return 0;
}
int init_data()
{
cin>>n>>m>>Q;
string s[5];int tot=0;
for(int i=1;i<=n;i++)
{
cin>>name[i];
id[name[i]]=++tot;
p[tot].name=name[i];
p[tot].id=tot;
// printf("%d:%s %d\n",i,s[0].c_str(),id[s[0]]);
}
while(Q--)
{
char ch;cin>>s[0];
int l=s[0].length();
s[0].resize(l-1);
int iid=id[s[0]],cnt=1,flag=0;
// printf("\n\n%dth person: %s\n",Q,s[0].c_str());
for(;;cnt++)
{
if(input(ch)=='\n'||ch==EOF) break;
if(cnt==5) {flag=1;break;}
cin>>s[cnt];
}
cnt--;
if(!flag) // useful
{
if(cnt==3)
{
if(s[1]=="Today"&&s[2]=="is")
{
int day=check(s[3]);
if(day) p[iid].today=day;
}
else if(s[2]=="is"&&s[3]=="guilty.")
{
int xid=id[s[1]];
if(xid) p[iid].is_[++p[iid].is]=xid;
}
else if(s[1]=="I"&&s[2]=="am"&&s[3]=="guilty.")
{
p[iid].is_self=1;
}
}
else if(cnt==4)
{
if(s[1]=="I"&&s[2]=="am"&&s[3]=="not"&&s[4]=="guilty.")
{
p[iid].not_self=1;
}
else if(s[2]=="is"&&s[3]=="not"&&s[4]=="guilty.")
{
int xid=id[s[1]];
if(xid) p[iid].not_[++p[iid].no]=xid;
}
}
}
else //don't need
for(;input(ch)!='\n'&&ch!=EOF;scanf("%*s")) ;
}
return tot;
}
void debug(int n)
{
for(int i=1;i<=n;i++)
{
printf("%dth:\n",i);
printf(" name:%s\n",p[i].name.c_str());
printf(" id:%d\n",p[i].id);
printf(" today:%d\n",p[i].today);
printf(" is_self:%d\n",p[i].is_self);
printf(" not_self:%d\n",p[i].not_self);
printf(" other_is:%d\n",p[i].is);
if(p[i].is)
{
for(int j=1;j<=p[i].is;j++)
printf(" guilty %d: %s\n",j,name[p[i].is_[j]].c_str());
int fsn=0x7fffffff;
}
printf(" other_not:%d\n",p[i].no);
if(p[i].no)
{
for(int j=1;j<=p[i].no;j++)
printf(" not guilty %d: %s\n",j,name[p[i].not_[j]].c_str());
}
}
}
int check(int g,int d)
{
int lie=0,cnt=0;
for(int i=1;i<=n;i++)
{
int t=0,f=0;
if(p[i].today)
{
if(p[i].today!=d) f=1;
else t=1;
}
if(p[i].not_self==1)
{
if(i==g) f=1;
else t=1;
}
if(p[i].is_self==1)
{
if(i!=g) f=1;
else t=1;
}
if(p[i].is)
{
for(int j=1;j<=p[i].is;j++)
if(f&&t) break;
else if(p[i].is_[j]!=g) f=1;
else t=1;
}
if(p[i].no)
{
for(int j=1;j<=p[i].no;j++)
if(t&&f) break;
else if(p[i].not_[j]==g) f=1;
else t=1;
}
if(t&&f) return false;
if(f) lie++;
if(!t&&!f) cnt++;
}
if(lie>m) return false;
if(lie+cnt<m) return false;
else return true;
}
int main()
{
freopen("std.in","r",stdin);
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
init_data();
int guilty,cnt=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=7;j++)
{
if(check(i,j))
{
if(++cnt==2)
{
printf("Cannot Determine");
return 0;
}
guilty=i;
break;
}
}
if(cnt==1) cout<<name[guilty];
else printf("Impossible");
return 0;
}
T2:
#include<bits/stdc++.h>
using namespace std;
int n,m,f[50005],ne[100005],way,cho,dist[50005],x,y,z,s,mx;
long long pj;
bool cho2,cho3,ver[50005];
struct node{
int u,v,w;
}mp[100005];
priority_queue<pair <int,int> >q;
inline int read(){
int k=0,f=1;
char c=getchar();
for(;!isdigit(c);c=getchar())
if(c=='-')
f=-1;
for(;isdigit(c);c=getchar())
k=k*10+c-'0';
return k*f;
}
inline void add(int num){
ne[num]=f[mp[num].u];
f[mp[num].u]=num;
return ;
}
inline bool cmp(const node &a,const node &b){
return a.w<b.w;
}
int main(){
freopen("track.in","r",stdin);
freopen("track.out","w",stdout);
n=read();
way=read();
m=n-1;
if(way==1)
cho=1;
for(int i=1;i<=m*2;i+=2){
mp[i+1].v=mp[i].u=read();
mp[i+1].u=mp[i].v=read();
mp[i+1].w=mp[i].w=read();
pj+=mp[i].w;
if(mp[i].u!=mp[i].v-1||mp[i+1].u!=mp[i+1].v-1)
cho2=true;
if(mp[i].u!=mp[i-2].u&&i!=1)
cho3=true;
add(i),add(i+1);
}
if(!cho2)
cho=2;
if(!cho3)
cho=3;
if(cho==1){
for(int i=1;i<=n;i++)
dist[i]=1e9;
dist[1]=0;
q.push(make_pair(0,1));
while(q.size()){
x=q.top().second,q.pop();
if(ver[x])
continue;
ver[x]=true;
for(int i=f[x];i;i=ne[i]){
y=mp[i].v;z=mp[i].w;
if(dist[y]>dist[x]+z){
dist[y]=dist[x]+z;
q.push(make_pair(-dist[y],y));
}
}
}
for(int i=1;i<=n;i++){
// cout<<dist[s]<<" "<<dist[i]<<endl;
if(dist[s]<dist[i])
s=i;
// cout<<dist[i]<<" ";
}
for(int i=1;i<=n;i++){
dist[i]=1e9;
ver[i]=false;
}
// cout<<s<<endl;
while(q.size())
q.pop();
dist[s]=0;
q.push(make_pair(0,s));
while(q.size()){
x=q.top().second,q.pop();
if(ver[x])
continue;
ver[x]=true;
for(int i=f[x];i;i=ne[i]){
y=mp[i].v;z=mp[i].w;
if(dist[y]>dist[x]+z){
dist[y]=dist[x]+z;
q.push(make_pair(-dist[y],y));
}
}
}
for(int i=1;i<=n;i++){
mx=max(dist[i],mx);
}
cout<<mx<<endl;
return 0;
}
// cout<<cho<<endl;
if(cho==3){
sort(mp+1,mp+m*2,cmp);
// for(int i=1;i<=m*2;i++)
// cout<<mp[i].w<<" ";
cout<<mp[m*2-way*2+1].w<<endl;
return 0;
}
if(way==m){
sort(mp+1,mp+m*2,cmp);
cout<<mp[1].w<<endl;
return 0;
}
cout<<pj/way<<endl;
return 0;
}
T3:
#include<bits/stdc++.h>
using namespace std;
int T,n,a[105],mx;
bool book[1005];
vector<int>v;
inline int read(){
int k=0,f=1;
char c=getchar();
for(;!isdigit(c);c=getchar())
if(c=='-')
f=-1;
for(;isdigit(c);c=getchar())
k=k*10+c-'0';
return k*f;
}
inline void dfs(int num){
if(num>mx)
return;
else
book[num]=true;
for(int i=0;i<v.size();i++)
dfs(num+v[i]);
return;
}
int main(){
freopen("money.in","r",stdin);
freopen("money.out","w",stdout);
T=read();
while(T--){
n=read();
while(v.size())
v.pop_back();
for(int i=1;i<=mx;i++)
book[i]=false;
for(int i=1;i<=n;i++)
a[i]=read(),mx=max(mx,a[i]);
sort(a+1,a+1+n);
for(int i=1;i<=n;i++){
if(!book[a[i]]){
book[a[i]]=true;
v.push_back(a[i]);
dfs(0);
}
}
cout<<v.size()<<endl;
}
return 0;
}